Coder Social home page Coder Social logo

apple / swift-crypto Goto Github PK

View Code? Open in Web Editor NEW
1.4K 34.0 151.0 10.21 MB

Open-source implementation of a substantial portion of the API of Apple CryptoKit suitable for use on Linux platforms.

Home Page: https://apple.github.io/swift-crypto

License: Apache License 2.0

Swift 9.10% C 52.86% Python 0.34% Shell 0.28% Dockerfile 0.01% CMake 0.13% Assembly 32.73% C++ 1.33% Pawn 3.22%
cryptography elliptic-curves hash-functions ciphers ecdsa ecdh eddsa boringssl swift-crypto swift

swift-crypto's Introduction

Swift Crypto

Swift Crypto is an open-source implementation of a substantial portion of the API of Apple CryptoKit suitable for use on Linux platforms. It enables cross-platform or server applications with the advantages of CryptoKit.

Using Swift Crypto

Swift Crypto is available as a Swift Package Manager package. To use it, add the following dependency in your Package.swift:

// swift-crypto 1.x, 2.x and 3.x are almost API compatible, so most clients
// should allow any of them
.package(url: "https://github.com/apple/swift-crypto.git", "1.0.0" ..< "4.0.0"),

and to your target, add Crypto to your dependencies. You can then import Crypto to get access to Swift Crypto's functionality.

Functionality

Swift Crypto exposes the portions of the CryptoKit API that do not rely on specialised hardware to any Swift application. It provides safe APIs that abstract over the complexity of many cryptographic primitives that need to be used in modern applications. These APIs encourage safe usages of the underlying primitives, follow cryptographic best practices, and should be the first choice for building applications that need to use cryptography.

The current features of Swift Crypto cover key exchange, key derivation, encryption and decryption, hashing, message authentication, and more.

For specific API documentation, please see our documentation.

Implementation

Swift Crypto compiles in two distinct modes depending on the platform for which it is being built.

When building Swift Crypto for use on an Apple platform where CryptoKit is already available, Swift Crypto compiles its entire API surface down to nothing and simply re-exports the API of CryptoKit. This means that when using Apple platforms Swift Crypto simply delegates all work to the core implementation of CryptoKit, as though Swift Crypto was not even there.

When building Swift Crypto for use on Linux, Swift Crypto builds substantially more code. In particular, we build:

  1. A vendored copy of BoringSSL's libcrypto.
  2. The common API of Swift Crypto and CryptoKit.
  3. The backing implementation of this common API, which calls into BoringSSL.

The API code, and some cryptographic primitives which are directly implemented in Swift, are exactly the same for both Apple CryptoKit and Swift Crypto. The backing BoringSSL-based implementation is unique to Swift Crypto.

Evolution

The vast majority of the Swift Crypto code is intended to remain in lockstep with the current version of Apple CryptoKit. For this reason, patches that extend the API of Swift Crypto will be evaluated cautiously. For any such extension there are two possible outcomes for adding the API.

Firstly, if the API is judged to be generally valuable and suitable for contribution to Apple CryptoKit, the API will be merged into a Staging namespace in Swift Crypto. This Staging namespace is a temporary home for any API that is expected to become available in Apple CryptoKit but that is not available today. This enables users to use the API soon after merging. When the API is generally available in CryptoKit the API will be deprecated in the Staging namespace and made available in the main Swift Crypto namespace.

Secondly, if the API is judged not to meet the criteria for acceptance in general CryptoKit but is sufficiently important to have available for server use-cases, it will be merged into a Server namespace. APIs are not expected to leave this namespace, as it indicates that they are not generally available but can only be accessed when using Swift Crypto.

Note that Swift Crypto does not intend to support all possible cryptographic primitives. Swift Crypto will focus on safe, modern cryptographic primitives that are broadly useful and that do not easily lend themselves to misuse. This means that some cryptographic algorithms may never be supported: for example, 3DES is highly unlikely to ever be supported by Swift Crypto due to the difficulty of safely deploying it and its legacy status. Please be aware when proposing the addition of new primitives to Swift Crypto that the proposal may be refused for this reason.

Code Organisation

Files in this repository are divided into two groups, based on whether they have a name that ends in _boring or are in a BoringSSL directory, or if they are not.

Files that meet the above criteria are specific to the Swift Crypto implementation. Changes to these files can be made fairly easily, so long as they meet the criteria below. If your file needs to import CCryptoBoringSSL or access a BoringSSL API, it needs to be marked this way.

Files that do not have the _boring suffix are part of the public API of CryptoKit. Changing these requires passing a higher bar, as any change in these files must be accompanied by a change in CryptoKit itself.

Contributing

Before contributing please read CONTRIBUTING.md, also make sure to read the two following sections.

Contributing new primitives

To contribute a new cryptographic primitive to Swift Crypto, you should address the following questions:

  1. What is the new primitive for?
  2. How widely is it deployed?
  3. Is it specified in any public specifications or used by any such specification?
  4. How easy is it to misuse?
  5. In what way does Swift Crypto fail to satisfy that use-case today?

In addition, new primitive implementations will only be accepted in cases where the implementation is thoroughly tested, including being tested with all currently available test vectors. If the Wycheproof project provides vectors for the algorithm those should be tested as well. It must be possible to ensure that we can appropriately regression test our implementations.

Contributing bug fixes

If you discover a bug with Swift Crypto, please report it via GitHub.

If you are interested in fixing a bug, feel free to open a pull request. Please also submit regression tests with bug fixes to ensure that they are not regressed in future.

If you have issues with CryptoKit, instead of Swift Crypto, please use Feedback Assistant to file those issues as you normally would.

Get started contributing

gyb

Some of the files in this project are autogenerated (metaprogramming) using the Swift Utils tools called gyb ("generate your boilerplate"). gyb is included in ./scripts/gyb.

gyb will generate some Foobar.swift Swift file from some Foobar.swift.gyb template file. You should not edit Foobar.swift directly, since all manual edits in that generated file will be overwritten the next time gyb is run.

You run gyb for a single file like so:

./scripts/gyb --line-directive "" Sources/Foobar.swift.gyb -o Sources/Foobar.swift

More conveniently you can run the bash script ./scripts/generate_boilerplate_files_with_gyb.sh to generate all Swift files from their corresponding gyb template.

If you add a new .gyb file, you should append a // MARK: - Generated file, do NOT edit warning inside it, e.g.

// MARK: - Generated file, do NOT edit
// any edits of this file WILL be overwritten and thus discarded
// see section `gyb` in `README` for details.

Security

If you believe you have identified a vulnerability in Swift Crypto, please report that vulnerability to Apple through the usual channel.

Swift versions

The most recent versions of Swift Crypto support Swift 5.7 and newer. The minimum Swift version supported by Swift Crypto releases are detailed below:

Swift Crypto Minimum Swift Version
2.0.0 ..< 2.1.0 5.2
2.1.0 ..< 2.2.0 5.4
2.2.0 ..< 2.4.2 5.5
2.4.2 ..< 3.1.0 5.6
3.1.0 ..< 3.3.0 5.7
3.3.0 ... 5.8

Compatibility

Swift Crypto follows SemVer 2.0.0. Our public API is the same as that of CryptoKit (except where we lack an implementation entirely), as well as everything in the Server and Staging namespaces. Any symbol beginning with an underscore, and any product beginning with an underscore, is not subject to semantic versioning: these APIs may change without warning. We do not maintain a stable ABI, as Swift Crypto is a source-only distribution.

What this means for you is that you should depend on Swift Crypto with a version range that covers everything from the minimum Swift Crypto version you require up to the next major version. In SwiftPM that can be easily done specifying for example from: "1.0.0" meaning that you support Swift Crypto in every version starting from 1.0.0 up to (excluding) 2.0.0. SemVer and Swift Crypto's Public API guarantees should result in a working program without having to worry about testing every single version for compatibility.

Swift Crypto 2.0.0 was released in September 2021. The only breaking change between Swift Crypto 2.0.0 and 1.0.0 was the addition of new cases in the CryptoKitError enumeration. For most users, then, it's safe to depend on either the 1.0.0 or 2.0.0 series of releases.

To do so, please use the following dependency in your Package.swift:

.package(url: "https://github.com/apple/swift-crypto.git", "1.0.0" ..< "3.0.0"),

Developing Swift Crypto on macOS

Swift Crypto normally defers to the OS implementation of CryptoKit on macOS. Naturally, this makes developing Swift Crypto on macOS tricky. To get Swift Crypto to build the open source implementation on macOS, in Package.swift, change let development = false to let development = true, as this will force Swift Crypto to build its public API.

swift-crypto's People

Contributors

0xtim avatar coldjugular avatar compnerd avatar d-date avatar davidben avatar dnadoba avatar edymtt avatar etcwilde avatar fabianfett avatar finagolfin avatar franzbusch avatar futurejones avatar gjcairo avatar glbrntt avatar gwynne avatar joey-gm avatar lovetodream avatar lukasa avatar maxdesiatov avatar ptoffy avatar rnro avatar sajjon avatar simonjbeaumont avatar sindresorhus avatar swiftty avatar tomerd avatar weissi avatar yim-lee avatar yockow avatar zeveisenberg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

swift-crypto's Issues

Validating HMACs with incremental computation

As far as I can tell, it's currently not possible to create a MAC from data with swift-crypto. The only way to validate an existing MAC that wasn't computed by swift-crypto in the current process (e.g. a MAC that was sent as part of an HTTP request, or a MAC that was saved to disk between process launches) with the HMAC API is to use isValidAuthenticationCode, which requires that the data you're validating fits in contiguous memory.

Motivation:

Most of the HMAC API is oriented around allowing computing HMACs from incremental data. Not being able to validate a MAC with this mode of operation directly seems like an oversight in the API. I can compare the MAC bytes manually, but swift-crypto doesn't expose its safeCompare function so it wouldn't be constant time any more.

Importance:

Low

Tests Crashing on macOS CLI

New Issue Checklist

Expected behavior

Test to execute and pass successfully

Actual behavior

Tests exit with signal code 4. Output is:

โžœ  swift-crypto git:(master) โœ— swift test
[480/480] Linking swift-cryptoPackageTests
Test Suite 'All tests' started at 2020-07-03 13:12:09.063
Test Suite 'swift-cryptoPackageTests.xctest' started at 2020-07-03 13:12:09.063
Test Suite 'AESGCMTests' started at 2020-07-03 13:12:09.063
Test Case '-[CryptoTests.AESGCMTests testBadKeySize]' started.
Test Case '-[CryptoTests.AESGCMTests testBadKeySize]' passed (0.089 seconds).
Test Case '-[CryptoTests.AESGCMTests testEncryptDecrypt]' started.
Test Case '-[CryptoTests.AESGCMTests testEncryptDecrypt]' passed (0.000 seconds).
Test Case '-[CryptoTests.AESGCMTests testExtractingBytesFromNonce]' started.
Test Case '-[CryptoTests.AESGCMTests testExtractingBytesFromNonce]' passed (0.001 seconds).
Test Case '-[CryptoTests.AESGCMTests testNonStandardNonceSizeCombinedRepresentation]' started.
Test Case '-[CryptoTests.AESGCMTests testNonStandardNonceSizeCombinedRepresentation]' passed (0.000 seconds).
Test Case '-[CryptoTests.AESGCMTests testRoundTripDataProtocols]' started.
Test Case '-[CryptoTests.AESGCMTests testRoundTripDataProtocols]' passed (0.001 seconds).
Test Case '-[CryptoTests.AESGCMTests testUserConstructedSealedBoxesCombined]' started.
Test Case '-[CryptoTests.AESGCMTests testUserConstructedSealedBoxesCombined]' passed (0.000 seconds).
Test Case '-[CryptoTests.AESGCMTests testUserConstructedSealedBoxesSplit]' started.
Test Case '-[CryptoTests.AESGCMTests testUserConstructedSealedBoxesSplit]' passed (0.000 seconds).
Test Case '-[CryptoTests.AESGCMTests testWycheproof]' started.
Test Case '-[CryptoTests.AESGCMTests testWycheproof]' passed (0.052 seconds).
Test Suite 'AESGCMTests' passed at 2020-07-03 13:12:09.207.
	 Executed 8 tests, with 0 failures (0 unexpected) in 0.143 (0.143) seconds
Test Suite 'ASN1Tests' started at 2020-07-03 13:12:09.207
Test Case '-[CryptoTests.ASN1Tests testASN1PKCS8PrivateKeyP256]' started.
Test Case '-[CryptoTests.ASN1Tests testASN1PKCS8PrivateKeyP256]' passed (0.003 seconds).
Test Case '-[CryptoTests.ASN1Tests testASN1PKCS8PrivateKeyP384]' started.
Exited with signal code 4

Steps to reproduce

  1. Clone and checkout latest master of Swift Crypto
  2. Edit the manifest to enable the CRYPTO_IN_SWIFTPM_FORCE_BUILD_API flag
  3. Run swift test from the command line

Tests are fine when run from Xcode

Swift Crypto version/commit hash

f8b6e4e17e06eb9f3ede1b84466430137424d8e8

Environment

Stand in the root of the repo and run ./scripts/environments.sh and paste the output below

Swift version: Apple Swift version 5.2.4 (swiftlang-1103.0.32.9 clang-1103.0.32.53)
Target: x86_64-apple-darwin19.5.0
Unix version: Darwin Mac-mini.brokenhands.net 19.5.0 Darwin Kernel Version 19.5.0: Tue May 26 20:41:44 PDT 2020
 root:xnu-6153.121.2~2/RELEASE_X86_64 x86_64

macOS version: 10.15.5
Xcode-select path: '/Applications/Xcode.app/Contents/Developer
Xcode: Xcode 11.5 (Build version 11E608c)

Crash report:

Process:               xctest [18030]
Path:                  /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Agents/xctest
Identifier:            xctest
Version:               16091
Code Type:             X86-64 (Native)
Parent Process:        ??? [17106]
Responsible:           Terminal [407]
User ID:               501

Date/Time:             2020-07-03 13:12:09.245 +0100
OS Version:            Mac OS X 10.15.5 (19F101)
Report Version:        12
Bridge OS Version:     4.5 (17P5300)
Anonymous UUID:        449A76F1-5666-1F50-8B5F-80A47723750E


Time Awake Since Boot: 8100 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:       0x000000000000000c, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Illegal instruction: 4
Termination Reason:    Namespace SIGNAL, Code 0x4
Terminating Process:   exc handler [18030]

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   swift-cryptoPackageTests      	0x0000000106893923 CCryptoBoringSSL_ec_GFp_mont_add + 1155 (ec_montgomery.c:354)

Thread 1:
0   libsystem_pthread.dylib       	0x00007fff6e336b68 start_wqthread + 0

Thread 2:: Dispatch queue: shared memory transport listener queue
0   libsystem_kernel.dylib        	0x00007fff6e27a756 __semwait_signal + 10
1   libsystem_c.dylib             	0x00007fff6e1fdeea nanosleep + 196
2   libsystem_c.dylib             	0x00007fff6e1fdde4 usleep + 53
3   com.apple.dt.instruments.DTXConnectionServices	0x000000010498a764 __52-[DTXSharedMemoryTransport _setupWithShm:asCreator:]_block_invoke + 690
4   libdispatch.dylib             	0x00007fff6e0dc6c4 _dispatch_call_block_and_release + 12
5   libdispatch.dylib             	0x00007fff6e0dd658 _dispatch_client_callout + 8
6   libdispatch.dylib             	0x00007fff6e0e2c44 _dispatch_lane_serial_drain + 597
7   libdispatch.dylib             	0x00007fff6e0e35d6 _dispatch_lane_invoke + 363
8   libdispatch.dylib             	0x00007fff6e0ecc09 _dispatch_workloop_worker_thread + 596
9   libsystem_pthread.dylib       	0x00007fff6e337a3d _pthread_wqthread + 290
10  libsystem_pthread.dylib       	0x00007fff6e336b77 start_wqthread + 15

Thread 3:
0   libsystem_pthread.dylib       	0x00007fff6e336b68 start_wqthread + 0

Thread 0 crashed with X86 Thread State (64-bit):
  rax: 0x0000000000000006  rbx: 0x0000000000000011  rcx: 0x00007ffeeb57a2c8  rdx: 0x0000000000000005
  rdi: 0x0000000000000000  rsi: 0x2c8b580052a115c8  rbp: 0x2c8b580052a115c8  rsp: 0x00007ffeeb57a300
   r8: 0x0000000000000006   r9: 0x0000000000000006  r10: 0x0000000000000000  r11: 0x108002f689aa3694
  r12: 0x0000000000000000  r13: 0x00007fc0a74237b0  r14: 0x00007fc0a8b04e02  r15: 0x00007fff6cf82800
  rip: 0x0000000106893923  rfl: 0x0000000000010206  cr2: 0x00000001068a40d0
  
Logical CPU:     0
Error Code:      0x00000000
Trap Number:     12


Binary Images:
       0x104681000 -        0x104684ff3 +xctest (16091) <29719E51-885E-3AA2-8D07-D8B0D4BB2073> /Applications/Xcode.app/Contents/Developer/usr/bin/xctest
       0x10468d000 -        0x1046d1fff  com.apple.dt.XCTAutomationSupport (1.0 - 16091) <883C34E4-21B4-3E69-886F-A878185CE545> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/PrivateFrameworks/XCTAutomationSupport.framework/Versions/A/XCTAutomationSupport
       0x10473f000 -        0x104884fff  com.apple.dt.XCTest (1.0 - 16091) <A8C55C5E-A139-3E51-8DBE-1A5A4DA4FDCC> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks/XCTest.framework/Versions/A/XCTest
       0x104978000 -        0x10499fff7  com.apple.dt.instruments.DTXConnectionServices (11.5 - 64535.49) <1BB4E9D8-9F5C-3A99-A425-4528C7F48252> /Applications/Xcode.app/Contents/SharedFrameworks/DTXConnectionServices.framework/Versions/A/DTXConnectionServices
       0x1049cd000 -        0x104a61ffb  com.apple.CoreSymbolicationDT (11.5 - 64535.40) <3475B70E-2389-3D59-876E-9397B5313372> /Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/CoreSymbolicationDT
       0x104acb000 -        0x104b93ff7  com.apple.dt.instruments.DVTInstrumentsFoundation (11.5 - 64535.49) <33D428BC-C0EF-3F3E-9032-D5CBEBE2B1DC> /Applications/Xcode.app/Contents/SharedFrameworks/DVTInstrumentsFoundation.framework/Versions/A/DVTInstrumentsFoundation
       0x104c5e000 -        0x104cf0fef  com.apple.SymbolicationDT (11.5 - 64535.37) <A75E8F16-4F47-35C1-9B8B-45AECF768E73> /Applications/Xcode.app/Contents/SharedFrameworks/SymbolicationDT.framework/Versions/A/SymbolicationDT
       0x104d5e000 -        0x104d9cffb  com.apple.DebugSymbols (194 - 194) <DDC13997-EDE0-3B50-B96D-8228A93D1604> /Applications/Xcode.app/Contents/SharedFrameworks/DebugSymbolsDT.framework/Versions/A/DebugSymbolsDT
       0x104dc4000 -        0x104dcbffb  com.apple.kperfdataDT (1.0 - 1) <3C702A34-1579-3E19-AE33-790D305F7BE3> /Applications/Xcode.app/Contents/SharedFrameworks/kperfdataDT.framework/Versions/A/kperfdataDT
       0x104dd6000 -        0x104e19ffb  com.apple.libktrace (1.0 - 354.100.2) <7A849149-7B3F-3A48-90AA-6CD578E943AF> /Applications/Xcode.app/Contents/SharedFrameworks/ktraceDT.framework/Versions/A/ktraceDT
       0x104e4f000 -        0x104e84ff3  com.apple.dt.instruments.DVTInstrumentsUtilities (11.5 - 64535.49) <CA9BA22A-D1A7-34CC-9D1A-2B5E2E7D4239> /Applications/Xcode.app/Contents/SharedFrameworks/DVTInstrumentsUtilities.framework/Versions/A/DVTInstrumentsUtilities
       0x104ece000 -        0x104ed4fff  com.apple.MallocStackLogging (1.0 - 1) <83EAF6A7-6DAD-38F3-819C-BADE4B3DAA7D> /Applications/Xcode.app/Contents/SharedFrameworks/MallocStackLoggingDT.framework/Versions/A/MallocStackLoggingDT
       0x106800000 -        0x106b4dd6f +swift-cryptoPackageTests (0) <B559A2FD-FC0A-3DB9-BF5D-555ADDC3A770> /Users/USER/*/swift-cryptoPackageTests
       0x106ef5000 -        0x106f04ff7 +libXCTestSwiftSupport.dylib (16091) <59B3A1D5-C38F-305F-9619-AD5EA5559B05> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/libXCTestSwiftSupport.dylib
       0x107492000 -        0x107523eff  dyld (750.5) <E4698FBD-806A-3396-B279-E685BA37430B> /usr/lib/dyld
    0x7fff2fd0a000 -     0x7fff2fd0afff  com.apple.Accelerate (1.11 - Accelerate 1.11) <56DFF715-6A4E-3231-BDCC-A348BCB05047> /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
    0x7fff2fd22000 -     0x7fff30378fff  com.apple.vImage (8.1 - 524.2.1) <17C93AB9-1625-3FDB-9851-C5E77BBE3428> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
    0x7fff30379000 -     0x7fff305e0ff7  libBLAS.dylib (1303.60.1) <CBC28BE4-3C78-3AED-9565-0D625251D121> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
    0x7fff305e1000 -     0x7fff30ab4fef  libBNNS.dylib (144.100.2) <8D653678-1F9B-3670-AAE2-46DFB8D37643> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib
    0x7fff30ab5000 -     0x7fff30e50fff  libLAPACK.dylib (1303.60.1) <F8E9D081-7C60-32EC-A47D-2D30CAD73C5F> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
    0x7fff30e51000 -     0x7fff30e66fec  libLinearAlgebra.dylib (1303.60.1) <D2C1ACEA-2B6A-339A-9EEB-62A76CC92CBE> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib
    0x7fff30e67000 -     0x7fff30e6cff3  libQuadrature.dylib (7) <3112C977-8306-3190-8313-01A952B7F3CF> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib
    0x7fff30e6d000 -     0x7fff30eddfff  libSparse.dylib (103) <40510BF9-99A7-3155-A81D-6DE5A0C73EDC> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib
    0x7fff30ede000 -     0x7fff30ef0fef  libSparseBLAS.dylib (1303.60.1) <3C1066AB-20D5-38D2-B1F2-70A03DE76D0B> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib
    0x7fff30ef1000 -     0x7fff310c8fd7  libvDSP.dylib (735.121.1) <74702E2E-ED05-3765-B18C-64BEFF62B517> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
    0x7fff310c9000 -     0x7fff3118bfef  libvMisc.dylib (735.121.1) <137558BF-503D-3A6E-96DC-A181E3FB31FF> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
    0x7fff3118c000 -     0x7fff3118cfff  com.apple.Accelerate.vecLib (3.11 - vecLib 3.11) <D7E8E400-35C8-3174-9956-8D1B483620DA> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
    0x7fff31336000 -     0x7fff320f6ffd  com.apple.AppKit (6.9 - 1894.50.103) <61269B8C-C432-335F-8894-B95C235A41A5> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
    0x7fff32146000 -     0x7fff32146fff  com.apple.ApplicationServices (48 - 50) <EEC73694-1A37-3C14-A839-6991E2BD8655> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
    0x7fff32147000 -     0x7fff321b2fff  com.apple.ApplicationServices.ATS (377 - 493.0.4.1) <A6912C4A-55CC-3701-BACA-E63423B99481> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
    0x7fff3224b000 -     0x7fff32289ff0  libFontRegistry.dylib (274.0.5.1) <A78A7869-C96C-3AD6-A038-DE541639BB60> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
    0x7fff322e4000 -     0x7fff32313fff  com.apple.ATSUI (1.0 - 1) <4B3C2201-DBB3-352C-936B-9C423122EFF6> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATSUI.framework/Versions/A/ATSUI
    0x7fff32314000 -     0x7fff32318ffb  com.apple.ColorSyncLegacy (4.13.0 - 1) <47D42CDE-2E9A-3AF6-9365-1BFD1189196B> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy
    0x7fff323b2000 -     0x7fff32409ffa  com.apple.HIServices (1.22 - 675.1) <273492E3-FF0F-3A8A-A83F-0F11F99B5F26> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
    0x7fff3240a000 -     0x7fff32418fff  com.apple.LangAnalysis (1.7.0 - 1.7.0) <DA175323-5BE3-3C54-92D4-A171A4A067E6> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
    0x7fff32419000 -     0x7fff3245effa  com.apple.print.framework.PrintCore (15.4 - 516.2) <99AEBCDB-2DCA-3A13-906F-7F0D7962B002> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
    0x7fff3245f000 -     0x7fff32469ff7  com.apple.QD (4.0 - 413) <D2E1DC80-D26F-3508-BBA5-B8AE7ED6CB0E> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
    0x7fff3246a000 -     0x7fff32477ffc  com.apple.speech.synthesis.framework (9.0.24 - 9.0.24) <823C0DE7-1351-3B39-8F06-AB5FCAD2C874> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
    0x7fff32478000 -     0x7fff32559ffa  com.apple.audio.toolbox.AudioToolbox (1.14 - 1.14) <75651F0A-F2CE-3F68-B86A-E66B8815DCF4> /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
    0x7fff3255b000 -     0x7fff3255bfff  com.apple.audio.units.AudioUnit (1.14 - 1.14) <E51DCB3C-CF4F-320B-AC86-D445E30C0891> /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
    0x7fff328f1000 -     0x7fff32c7fffd  com.apple.CFNetwork (1126 - 1126) <BB8F4C63-10B8-3ACD-84CF-D4DCFA9245DD> /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
    0x7fff32cfb000 -     0x7fff32cfbfff  com.apple.Carbon (160 - 162) <4F1F60CB-6C1E-3D79-832E-8D606601F282> /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
    0x7fff32cfc000 -     0x7fff32cffff3  com.apple.CommonPanels (1.2.6 - 101) <333BBF55-AF23-3B99-A9FF-7906175B9406> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels
    0x7fff32d00000 -     0x7fff32ff4ff3  com.apple.HIToolbox (2.1.1 - 994.6) <5C44ACA7-D158-3F9B-8F88-0477510D44FA> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
    0x7fff32ff5000 -     0x7fff32ff8ff3  com.apple.help (1.3.8 - 71) <4B2701A0-8813-35F8-82F8-676B184D15C4> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help
    0x7fff32ff9000 -     0x7fff32ffeff7  com.apple.ImageCapture (9.0 - 1600.60.4.2) <20872A2D-CBF9-38E6-BD16-C1D387120651> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture
    0x7fff32fff000 -     0x7fff32ffffff  com.apple.ink.framework (10.15 - 227) <5B60FDDE-D60E-326B-BD3D-6EA5FA1CBB76> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
    0x7fff33000000 -     0x7fff3301affa  com.apple.openscripting (1.7 - 185.1) <E59F893B-1A73-3098-8924-79227EC9787E> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting
    0x7fff3303b000 -     0x7fff3303bfff  com.apple.print.framework.Print (15 - 271) <07C50BF6-2222-3769-A5B8-79D7F996183F> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print
    0x7fff3303c000 -     0x7fff3303eff7  com.apple.securityhi (9.0 - 55008) <D7017D5A-4206-3E2F-9F8E-0F932422CA87> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI
    0x7fff3303f000 -     0x7fff33045fff  com.apple.speech.recognition.framework (6.0.3 - 6.0.3) <1188E643-967C-334E-BC1A-60A0F82C67E5> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
    0x7fff331ed000 -     0x7fff332e3fff  com.apple.ColorSync (4.13.0 - 3394.9) <61698A7B-BB8C-3891-9547-703FF84671A8> /System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync
    0x7fff332e4000 -     0x7fff333d4ff7  com.apple.combine (1.0 - 134.102) <73FEA410-04BA-3F72-8102-CDFACF57361F> /System/Library/Frameworks/Combine.framework/Versions/A/Combine
    0x7fff335ce000 -     0x7fff33ad7ffb  com.apple.audio.CoreAudio (5.0 - 5.0) <62BEE4B7-8A26-3951-9D78-4E193617AF7A> /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
    0x7fff33b2a000 -     0x7fff33b62fff  com.apple.CoreBluetooth (1.0 - 1) <6BC7F863-4495-371F-BC54-543E5CFE1665> /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth
    0x7fff33b63000 -     0x7fff33f4dfe8  com.apple.CoreData (120 - 977.3) <D902A2E3-1D0A-3995-974E-A526976E5735> /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
    0x7fff33f4e000 -     0x7fff3407effe  com.apple.CoreDisplay (1.0 - 186.6.12) <EA74CC46-8715-3B90-95E8-4594D2F0CC8A> /System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay
    0x7fff3407f000 -     0x7fff344feffb  com.apple.CoreFoundation (6.9 - 1676.105) <6AF8B3CC-BC3F-3869-B9FB-1D881422364E> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
    0x7fff34500000 -     0x7fff34b74ff8  com.apple.CoreGraphics (2.0 - 1355.17) <E1CE3919-F36B-309F-89BA-79F36DC8125E> /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
    0x7fff34b82000 -     0x7fff34eddff0  com.apple.CoreImage (15.0.0 - 940.9) <44F68E8C-315A-32A6-BB19-7F24C00AB347> /System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage
    0x7fff34ede000 -     0x7fff34f47ff0  com.apple.corelocation (2394.0.22 - 2394.0.22) <B1E3382A-62ED-36F0-AB86-F46D7B7FF9AE> /System/Library/Frameworks/CoreLocation.framework/Versions/A/CoreLocation
    0x7fff35466000 -     0x7fff35466fff  com.apple.CoreServices (1069.24 - 1069.24) <D9F6AB40-10EC-3682-A969-85560E2E4768> /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
    0x7fff35467000 -     0x7fff354ecfff  com.apple.AE (838.1 - 838.1) <5F26DA9B-FB2E-3AF8-964B-63BD6671CF12> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
    0x7fff354ed000 -     0x7fff357ceff7  com.apple.CoreServices.CarbonCore (1217 - 1217) <8022AF47-AA99-3786-B086-141D84F00387> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
    0x7fff357cf000 -     0x7fff3581cffd  com.apple.DictionaryServices (1.2 - 323.6) <C0F3830C-A4C6-3046-9A6A-DE1B5D448C2C> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
    0x7fff3581d000 -     0x7fff35825ff7  com.apple.CoreServices.FSEvents (1268.100.1 - 1268.100.1) <E4B2CAF2-1203-335F-9971-1278CB6E2AE0> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents
    0x7fff35826000 -     0x7fff35a60ff6  com.apple.LaunchServices (1069.24 - 1069.24) <2E0AD228-B1CC-3645-91EE-EB7F46F2147B> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
    0x7fff35a61000 -     0x7fff35af9ff1  com.apple.Metadata (10.7.0 - 2076.6) <C8034E84-7DD4-34B9-9CDF-16A05032FF39> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
    0x7fff35afa000 -     0x7fff35b27fff  com.apple.CoreServices.OSServices (1069.24 - 1069.24) <72FDEA52-7607-3745-AC43-630D80962099> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
    0x7fff35b28000 -     0x7fff35b8ffff  com.apple.SearchKit (1.4.1 - 1.4.1) <086EB5DF-A2EC-3342-8028-CA7996BE5CB2> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
    0x7fff35b90000 -     0x7fff35bb4ff5  com.apple.coreservices.SharedFileList (131.4 - 131.4) <AE333DA2-C279-3751-8C15-B963E58EE61E> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList
    0x7fff35ed9000 -     0x7fff36090ffc  com.apple.CoreText (643.1.5.1 - 643.1.5.1) <715FE3F7-E8FB-3997-85A0-3AB2839F6C30> /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
    0x7fff36091000 -     0x7fff360d5ffb  com.apple.CoreVideo (1.8 - 344.3) <A200AFC7-2CB2-30CD-8B2A-1269CA64A29B> /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
    0x7fff360d6000 -     0x7fff36163ffc  com.apple.framework.CoreWLAN (13.0 - 1601.2) <855E51AA-DF3A-3BB9-A4F0-6880D42B8762> /System/Library/Frameworks/CoreWLAN.framework/Versions/A/CoreWLAN
    0x7fff363fa000 -     0x7fff36400fff  com.apple.DiskArbitration (2.7 - 2.7) <52E7D181-2A18-37CD-B24F-AA32E93F7A69> /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
    0x7fff36739000 -     0x7fff36afefff  com.apple.Foundation (6.9 - 1676.105) <1FA28BAB-7296-3A09-8E1E-E62A7D233DB8> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
    0x7fff36b6b000 -     0x7fff36bbbff7  com.apple.GSS (4.0 - 2.0) <4E241C00-42A5-3572-9430-D950FBB7A4A0> /System/Library/Frameworks/GSS.framework/Versions/A/GSS
    0x7fff36cf8000 -     0x7fff36e0cff3  com.apple.Bluetooth (7.0.5 - 7.0.5f6) <5897C368-9674-3E34-B144-FFB06A2DF37B> /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth
    0x7fff36e72000 -     0x7fff36f16ff3  com.apple.framework.IOKit (2.0.2 - 1726.121.1) <A0F54725-036F-3279-A46E-C2ABDBFD479B> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
    0x7fff36f18000 -     0x7fff36f29ffb  com.apple.IOSurface (269.11 - 269.11) <D3CC2AA1-4AE2-30EE-A9DB-C04CCAA88ADE> /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
    0x7fff36fa8000 -     0x7fff37104ffe  com.apple.ImageIO.framework (3.3.0 - 1976.6) <5B4C2E04-9161-3C82-A7FB-F4D51E3C1E10> /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
    0x7fff37105000 -     0x7fff37108fff  libGIF.dylib (1976.6) <3B26EE1C-C570-305C-A9A3-EA62D2F2E7B8> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
    0x7fff37109000 -     0x7fff371c2fff  libJP2.dylib (1976.6) <EB4E4E09-DD81-3E6B-A513-3667E810AEF3> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
    0x7fff371c3000 -     0x7fff371e6fe3  libJPEG.dylib (1976.6) <9D7FAC55-85A6-34AB-9F26-0BCA381E8CE7> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
    0x7fff37462000 -     0x7fff3747cfef  libPng.dylib (1976.6) <4886A1F8-E9CA-38F2-BF2F-1FCA1DFDD1C9> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
    0x7fff3747d000 -     0x7fff3747efff  libRadiance.dylib (1976.6) <FA759D33-131A-33B8-943E-32409F162738> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
    0x7fff3747f000 -     0x7fff374c8fff  libTIFF.dylib (1976.6) <E9994BF8-6CF5-3422-B4FD-A14DC390EF12> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
    0x7fff38a2a000 -     0x7fff38a3cff3  com.apple.Kerberos (3.0 - 1) <AE0E56CA-D924-3CC8-BBAA-8C6EEC3038BE> /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
    0x7fff38a3d000 -     0x7fff38a3dfff  libHeimdalProxy.dylib (77) <A970C7A8-7CCD-3701-A459-078BD5E8FE4E> /System/Library/Frameworks/Kerberos.framework/Versions/A/Libraries/libHeimdalProxy.dylib
    0x7fff38dcf000 -     0x7fff38dd9ffb  com.apple.MediaAccessibility (1.0 - 125.1) <DBF40A12-65A6-33E4-839C-292600B7D910> /System/Library/Frameworks/MediaAccessibility.framework/Versions/A/MediaAccessibility
    0x7fff395f4000 -     0x7fff396beff7  com.apple.Metal (212.7 - 212.7) <CC7BF715-142B-3C2A-81AD-0E35693230F2> /System/Library/Frameworks/Metal.framework/Versions/A/Metal
    0x7fff396db000 -     0x7fff39718ff7  com.apple.MetalPerformanceShaders.MPSCore (1.0 - 1) <52089325-EC97-3EED-ABB3-9B39EC0BD429> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSCore.framework/Versions/A/MPSCore
    0x7fff39719000 -     0x7fff397a3fe2  com.apple.MetalPerformanceShaders.MPSImage (1.0 - 1) <9E434EA0-6BCA-3903-B882-CEB69730A63B> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSImage.framework/Versions/A/MPSImage
    0x7fff397a4000 -     0x7fff397c9ff4  com.apple.MetalPerformanceShaders.MPSMatrix (1.0 - 1) <EDD6C3A5-E231-3FB1-B4D4-45742AFB9A4E> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix
    0x7fff397ca000 -     0x7fff397dfffb  com.apple.MetalPerformanceShaders.MPSNDArray (1.0 - 1) <C5A2B865-5CE2-3E5D-8452-54639FCB0954> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Versions/A/MPSNDArray
    0x7fff397e0000 -     0x7fff3993effc  com.apple.MetalPerformanceShaders.MPSNeuralNetwork (1.0 - 1) <47CCDBAC-5843-366A-A68C-6E8851D0865D> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork
    0x7fff3993f000 -     0x7fff3998eff4  com.apple.MetalPerformanceShaders.MPSRayIntersector (1.0 - 1) <302BDF8E-B00A-3123-A6C4-E262B7513CF6> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector
    0x7fff3998f000 -     0x7fff39990ff5  com.apple.MetalPerformanceShaders.MetalPerformanceShaders (1.0 - 1) <14F84B42-9DA2-39A1-81B4-666B8020520C> /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders
    0x7fff3aa17000 -     0x7fff3aa23ffe  com.apple.NetFS (6.0 - 4.0) <AC74E6A4-6E9B-3AB1-9577-8277F8A3EDE0> /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
    0x7fff3aa24000 -     0x7fff3ab7bff3  com.apple.Network (1.0 - 1) <B5B8E999-BBCC-3DEF-8881-8FFF69F8EC4B> /System/Library/Frameworks/Network.framework/Versions/A/Network
    0x7fff3d5ac000 -     0x7fff3d604fff  com.apple.opencl (3.5 - 3.5) <9B101D40-EA79-3C0D-B7AE-A3F18094B2D7> /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
    0x7fff3d605000 -     0x7fff3d621fff  com.apple.CFOpenDirectory (10.15 - 220.40.1) <BFC32EBE-D95C-3267-B95C-5CEEFD189EA6> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
    0x7fff3d622000 -     0x7fff3d62dffd  com.apple.OpenDirectory (10.15 - 220.40.1) <76A20BBA-775F-3E17-AB0F-FEDFCDCE0716> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
    0x7fff3df93000 -     0x7fff3df95fff  libCVMSPluginSupport.dylib (17.10.22) <AAE07E0C-4B28-364B-A7D9-028C7CD14954> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
    0x7fff3df96000 -     0x7fff3df9bfff  libCoreFSCache.dylib (176.15) <609C5DFC-9A97-344D-BBC7-E0B08D862C63> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib
    0x7fff3df9c000 -     0x7fff3dfa0fff  libCoreVMClient.dylib (176.15) <8F8DD27F-AC7C-398D-A8E3-396F1528E317> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
    0x7fff3dfa1000 -     0x7fff3dfa9ff7  libGFXShared.dylib (17.10.22) <D0649AB5-5331-328D-8141-E5A6F06D4AD7> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
    0x7fff3dfaa000 -     0x7fff3dfb4fff  libGL.dylib (17.10.22) <116DDBF7-D725-3B8C-BD0B-A21B758FE421> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
    0x7fff3dfb5000 -     0x7fff3dfe9ff7  libGLImage.dylib (17.10.22) <2B314C76-C7E6-3AC5-9157-70B0529C1F9B> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
    0x7fff3e17f000 -     0x7fff3e1bbfff  libGLU.dylib (17.10.22) <B29F73B2-B5A9-3C38-AF77-351173D2E3DB> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
    0x7fff3ebf7000 -     0x7fff3ec06ff7  com.apple.opengl (17.10.22 - 17.10.22) <D5BF32A8-2E0A-345D-80A3-7CA7C2CF748D> /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
    0x7fff3fbc4000 -     0x7fff3fe46ff9  com.apple.QuartzCore (1.11 - 841.2) <444E6F22-DFA6-391B-B51F-A96AE69E524D> /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
    0x7fff409c7000 -     0x7fff40d10ff1  com.apple.security (7.0 - 59306.120.7) <AEA33464-1507-36F1-8CAE-A86EB787F9B5> /System/Library/Frameworks/Security.framework/Versions/A/Security
    0x7fff40d11000 -     0x7fff40d99ffb  com.apple.securityfoundation (6.0 - 55236.60.1) <79289FE1-CB5F-3BEF-A33F-11A29A93A681> /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
    0x7fff40dc8000 -     0x7fff40dccff8  com.apple.xpc.ServiceManagement (1.0 - 1) <4194D29D-F0D4-33F8-839A-D03C6C62D8DB> /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
    0x7fff41a78000 -     0x7fff41ae6ff7  com.apple.SystemConfiguration (1.19 - 1.19) <0CF8726A-BE41-3E07-B895-FBC44B75450E> /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
    0x7fff41caf000 -     0x7fff41ce4ff2  com.apple.UserNotifications (1.0 - ???) <773486B3-7483-3196-A568-B0ED1493E05A> /System/Library/Frameworks/UserNotifications.framework/Versions/A/UserNotifications
    0x7fff45a47000 -     0x7fff45b0cff7  com.apple.APFS (1412.120.2 - 1412.120.2) <1E8FD511-FDC4-31A2-ACDE-EB5192032BC6> /System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS
    0x7fff46153000 -     0x7fff4615effc  com.apple.accessibility.AXCoreUtilities (1.0 - 1) <9E0367E6-6A4F-31FE-A493-9F3DF7510CA0> /System/Library/PrivateFrameworks/AXCoreUtilities.framework/Versions/A/AXCoreUtilities
    0x7fff4627b000 -     0x7fff462cefff  com.apple.AXRuntime (1.0.0 - 1) <D2CD84E5-288C-3D28-A404-C176018F8F98> /System/Library/PrivateFrameworks/AXRuntime.framework/Versions/A/AXRuntime
    0x7fff46c1c000 -     0x7fff46c1dff1  com.apple.AggregateDictionary (1.0 - 1) <B907CE7A-0122-3E63-BF39-0A242B0DD7C4> /System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary
    0x7fff476b4000 -     0x7fff476d8ffb  com.apple.framework.Apple80211 (13.0 - 1610.1) <B4B80CD6-B38E-3748-B30B-5088CCE9A7A8> /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Apple80211
    0x7fff47996000 -     0x7fff479a5fd7  com.apple.AppleFSCompression (119.100.1 - 1.0) <2E75CF51-B693-3275-9A4F-40571D48745E> /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
    0x7fff47aa4000 -     0x7fff47aafff7  com.apple.AppleIDAuthSupport (1.0 - 1) <F4651654-E24F-3BF4-8DDF-8F91E5219BA4> /System/Library/PrivateFrameworks/AppleIDAuthSupport.framework/Versions/A/AppleIDAuthSupport
    0x7fff47af1000 -     0x7fff47b39ff7  com.apple.AppleJPEG (1.0 - 1) <4655FF70-9772-3D7C-8159-5A5E56C9F84B> /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG
    0x7fff47f28000 -     0x7fff47f4afff  com.apple.applesauce (1.0 - 16.25) <33B66B71-64A4-365D-9953-E0545E69A5E7> /System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce
    0x7fff48009000 -     0x7fff4800cffb  com.apple.AppleSystemInfo (3.1.5 - 3.1.5) <92580EE3-74BF-3488-90ED-C8EBD7A1B4C3> /System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/AppleSystemInfo
    0x7fff480a6000 -     0x7fff480b5ff9  com.apple.AssertionServices (1.0 - 223.100.31) <478D2004-9B84-3AE9-9A0B-0A0B68ED028F> /System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices
    0x7fff481b4000 -     0x7fff48302ffb  com.apple.AssistantServices (1.0 - 1) <DF9EA53A-D242-3270-97E4-884132FDA577> /System/Library/PrivateFrameworks/AssistantServices.framework/Versions/A/AssistantServices
    0x7fff48c48000 -     0x7fff48e88fe0  com.apple.audio.AudioToolboxCore (1.0 - 1104.84) <FA17E892-6A1A-309D-95C7-30ACFC44319C> /System/Library/PrivateFrameworks/AudioToolboxCore.framework/Versions/A/AudioToolboxCore
    0x7fff48e8c000 -     0x7fff48fa8ff0  com.apple.AuthKit (1.0 - 1) <375C3886-5430-3C02-BD2C-4244BF490ABA> /System/Library/PrivateFrameworks/AuthKit.framework/Versions/A/AuthKit
    0x7fff49165000 -     0x7fff4916eff7  com.apple.coreservices.BackgroundTaskManagement (1.0 - 104) <F070F440-27AB-3FCF-9602-F278C332CA01> /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement
    0x7fff4916f000 -     0x7fff49210ff5  com.apple.backup.framework (1.11.5 - 1298.5.10) <637CA389-627A-365C-98C2-D297C47D6EE3> /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
    0x7fff49211000 -     0x7fff4929dff6  com.apple.BaseBoard (466.3 - 466.3) <1718A41A-9923-3FD0-96B8-82376E153D27> /System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard
    0x7fff4936e000 -     0x7fff4939effa  com.apple.BoardServices (1.0 - 466.3) <FC083303-AD9D-3CBB-A4BA-A9BAFD224B1B> /System/Library/PrivateFrameworks/BoardServices.framework/Versions/A/BoardServices
    0x7fff4939f000 -     0x7fff493dbff7  com.apple.bom (14.0 - 219.2) <586F1D9C-23B0-3F38-9C5B-728E9DD8B953> /System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom
    0x7fff4ae50000 -     0x7fff4ae60ffb  com.apple.CommonAuth (4.0 - 2.0) <91EC83B5-857D-3D4F-93B1-AAD7E0E029D8> /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
    0x7fff4ae74000 -     0x7fff4ae8bfff  com.apple.commonutilities (8.0 - 900) <12C6DEE5-1740-39A5-9711-6F815C6D77BD> /System/Library/PrivateFrameworks/CommonUtilities.framework/Versions/A/CommonUtilities
    0x7fff4b9b5000 -     0x7fff4b9d4ffc  com.apple.analyticsd (1.0 - 1) <A4F653CA-2FD6-348B-B7B3-48D91A67508A> /System/Library/PrivateFrameworks/CoreAnalytics.framework/Versions/A/CoreAnalytics
    0x7fff4bf6b000 -     0x7fff4bf7bff3  com.apple.CoreEmoji (1.0 - 107.1) <CDCCB4B0-B98F-38E8-9568-C81320E756EB> /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji
    0x7fff4c5bb000 -     0x7fff4c625ff0  com.apple.CoreNLP (1.0 - 213) <40FC46D2-844C-3282-A8E4-69DD827F05C5> /System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP
    0x7fff4ca53000 -     0x7fff4ca5bff8  com.apple.CorePhoneNumbers (1.0 - 1) <B2CE100D-B82F-3481-86F6-7F85FF8BFAFB> /System/Library/PrivateFrameworks/CorePhoneNumbers.framework/Versions/A/CorePhoneNumbers
    0x7fff4d448000 -     0x7fff4d46bfff  com.apple.CoreSVG (1.0 - 129) <3141D198-0507-3F72-A2C9-752EAFE3EEB3> /System/Library/PrivateFrameworks/CoreSVG.framework/Versions/A/CoreSVG
    0x7fff4d46c000 -     0x7fff4d49ffff  com.apple.CoreServicesInternal (446.7 - 446.7) <B2CEC515-2225-3CB1-B34A-904AAEA54FDF> /System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal
    0x7fff4d4a0000 -     0x7fff4d4ceffd  com.apple.CSStore (1069.24 - 1069.24) <C96E5CE8-D604-3F13-B079-B2BA33B90081> /System/Library/PrivateFrameworks/CoreServicesStore.framework/Versions/A/CoreServicesStore
    0x7fff4d9f3000 -     0x7fff4da89ff7  com.apple.CoreSymbolication (11.4 - 64535.33.2) <0E7A1529-C737-33FD-AA7D-A32EB8B192DA> /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
    0x7fff4db21000 -     0x7fff4dc4dff6  com.apple.coreui (2.1 - 609.4) <9B93CC42-804B-305A-8FCE-5F06821B544C> /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
    0x7fff4dc4e000 -     0x7fff4de04ff5  com.apple.CoreUtils (6.2.1 - 621.5) <CD4B58E5-1494-3457-84FF-3869378E2DC9> /System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils
    0x7fff4df3e000 -     0x7fff4df51ff1  com.apple.CrashReporterSupport (10.13 - 15016) <827F4E31-9F23-3683-AC5A-59CCA90F2359> /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
    0x7fff4e00a000 -     0x7fff4e01cff8  com.apple.framework.DFRFoundation (1.0 - 252.50.1) <19F79D32-71D3-3A87-98C9-B5C6C96076C4> /System/Library/PrivateFrameworks/DFRFoundation.framework/Versions/A/DFRFoundation
    0x7fff4e01d000 -     0x7fff4e022fff  com.apple.DSExternalDisplay (3.1 - 380) <971F24F1-B1FC-3674-9C00-F88EEF94DC05> /System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay
    0x7fff4e0ac000 -     0x7fff4e126ff0  com.apple.datadetectorscore (8.0 - 659) <9FD9BDFA-3724-3BEA-946C-0473447196A3> /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
    0x7fff4e172000 -     0x7fff4e1afff8  com.apple.DebugSymbols (194 - 194) <9BCE6685-6C45-3DF9-98EB-FCF8196160F0> /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
    0x7fff4e1b0000 -     0x7fff4e338ff6  com.apple.desktopservices (1.14.5 - 1281.5.3) <79972B8B-7B60-3AD5-9A5F-17976DE8080B> /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
    0x7fff4fce6000 -     0x7fff50101ff1  com.apple.vision.FaceCore (4.3.0 - 4.3.0) <1B5D7DD6-718E-3111-A702-EB04B8903662> /System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore
    0x7fff5079f000 -     0x7fff508d7ffc  libFontParser.dylib (277.2.5.3) <DEB18756-082F-359B-AE93-F9C3B5EC7AF4> /System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib
    0x7fff50971000 -     0x7fff50981ff6  libhvf.dylib (1.0 - $[CURRENT_PROJECT_VERSION]) <6396BC1F-13C1-37D7-91B9-1FF60910C7FA> /System/Library/PrivateFrameworks/FontServices.framework/libhvf.dylib
    0x7fff55520000 -     0x7fff55526fff  com.apple.GPUWrangler (5.2.4 - 5.2.4) <5B819701-9F0C-374B-8925-A22DFC16514F> /System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler
    0x7fff55884000 -     0x7fff5686effc  com.apple.GeoServices (1.0 - 1624.24.10.29.41) <9A6FF368-7127-336F-9595-B261141810EA> /System/Library/PrivateFrameworks/GeoServices.framework/Versions/A/GeoServices
    0x7fff5699a000 -     0x7fff569a8ffb  com.apple.GraphVisualizer (1.0 - 100.1) <0A86C9FF-4484-3C7F-BC71-3D23BDBE81CE> /System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer
    0x7fff569a9000 -     0x7fff569b6ff3  com.apple.GraphicsServices (1.0 - 1.0) <628EA7EF-A5C7-36E4-9193-46F55852C208> /System/Library/PrivateFrameworks/GraphicsServices.framework/Versions/A/GraphicsServices
    0x7fff56b47000 -     0x7fff56c05ff4  com.apple.Heimdal (4.0 - 2.0) <F2C504F6-E211-3AB0-9754-D96D2F96634B> /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
    0x7fff58d89000 -     0x7fff58d91ff5  com.apple.IOAccelerator (438.5.4 - 438.5.4) <A3CF45E0-4D88-33BF-BAEC-690D5664CDA0> /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator
    0x7fff58d9e000 -     0x7fff58db5fff  com.apple.IOPresentment (1.0 - 37) <3EDBB454-D248-394B-A026-9717CD8535C3> /System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment
    0x7fff5913d000 -     0x7fff59188ff1  com.apple.IconServices (438.3 - 438.3) <2AE74790-64F1-3B0A-9534-DEEEE307E562> /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices
    0x7fff59346000 -     0x7fff5934dff9  com.apple.InternationalSupport (1.0 - 45.4) <C22AA77A-EDA6-3626-8816-521A8CD43C4A> /System/Library/PrivateFrameworks/InternationalSupport.framework/Versions/A/InternationalSupport
    0x7fff595da000 -     0x7fff595f9ffd  com.apple.security.KeychainCircle.KeychainCircle (1.0 - 1) <76DB5326-BE5D-3339-975C-D9FCF39A341E> /System/Library/PrivateFrameworks/KeychainCircle.framework/Versions/A/KeychainCircle
    0x7fff5972e000 -     0x7fff597fcffd  com.apple.LanguageModeling (1.0 - 215.1) <A6FAA215-9A01-3EE1-B304-2238801C5883> /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling
    0x7fff597fd000 -     0x7fff59845fff  com.apple.Lexicon-framework (1.0 - 72) <6AE1872C-0352-36FE-90CC-7303F13A5BEF> /System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon
    0x7fff5984c000 -     0x7fff59851ff3  com.apple.LinguisticData (1.0 - 353.18) <686E7B7C-640F-3D7B-A9C1-31E2DFACD457> /System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData
    0x7fff59878000 -     0x7fff5989cffe  com.apple.locationsupport (2394.0.22 - 2394.0.22) <5C15E3FF-D269-3A99-B3EF-B806F61EE1EA> /System/Library/PrivateFrameworks/LocationSupport.framework/Versions/A/LocationSupport
    0x7fff5989f000 -     0x7fff598f4ff7  com.apple.LoggingSupport (1.0 - 1147.120) <8BAFBD18-C8E9-32D7-9171-ADB92620B7F5> /System/Library/PrivateFrameworks/LoggingSupport.framework/Versions/A/LoggingSupport
    0x7fff5a0a7000 -     0x7fff5a0b2fff  com.apple.MallocStackLogging (1.0 - 1) <0EDCEAAA-4411-3BCB-B2AF-C8D2CA689C44> /System/Library/PrivateFrameworks/MallocStackLogging.framework/Versions/A/MallocStackLogging
    0x7fff5a4d8000 -     0x7fff5a86dff9  com.apple.MediaRemote (1.0 - 1) <CEA58C03-7579-31CC-98E3-6820AD238F53> /System/Library/PrivateFrameworks/MediaRemote.framework/Versions/A/MediaRemote
    0x7fff5a86e000 -     0x7fff5a8aaffc  com.apple.MediaServices (1.0 - 1) <B2385109-3D9F-3F86-BAAF-CB8F53118B9D> /System/Library/PrivateFrameworks/MediaServices.framework/Versions/A/MediaServices
    0x7fff5abb8000 -     0x7fff5ac04fff  com.apple.spotlight.metadata.utilities (1.0 - 2076.6) <C3AEA22D-1FEB-3E38-9821-1FA447C8AF9D> /System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities
    0x7fff5ac05000 -     0x7fff5acd6ffa  com.apple.gpusw.MetalTools (1.0 - 1) <A23FFAB6-437C-303C-A3E8-99F323F8E734> /System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools
    0x7fff5ace9000 -     0x7fff5ad0fff2  com.apple.metricmeasurement (0 - 1) <F5DE3B2C-1E07-3075-9B2E-77B826EE4284> /System/Library/PrivateFrameworks/MetricMeasurement.framework/Versions/A/MetricMeasurement
    0x7fff5af41000 -     0x7fff5af5ffff  com.apple.MobileKeyBag (2.0 - 1.0) <B564179F-A5E9-3BD8-892D-CEF2BE0DA0D7> /System/Library/PrivateFrameworks/MobileKeyBag.framework/Versions/A/MobileKeyBag
    0x7fff5b1c2000 -     0x7fff5b1f2ff7  com.apple.MultitouchSupport.framework (3440.1 - 3440.1) <4E7CB188-382E-3128-8671-4A3EF6E06622> /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
    0x7fff5b6f2000 -     0x7fff5b6fcfff  com.apple.NetAuth (6.2 - 6.2) <D660F2CB-5A49-3DD0-9DB3-86EF0797828C> /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
    0x7fff5b7be000 -     0x7fff5b7daff0  com.apple.network.statistics.framework (1.2 - 1) <A106D8B1-1FDF-33D6-9E28-16BF4246C271> /System/Library/PrivateFrameworks/NetworkStatistics.framework/Versions/A/NetworkStatistics
    0x7fff5c112000 -     0x7fff5c15dffb  com.apple.OTSVG (1.0 - 643.1.5.1) <CD494F00-9AA4-3A48-916B-EA8661F9772D> /System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG
    0x7fff5d371000 -     0x7fff5d37cff2  com.apple.PerformanceAnalysis (1.243.2 - 243.2) <941698D6-EF00-3D59-8560-F160BC04B412> /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
    0x7fff5d37d000 -     0x7fff5d3a5ffb  com.apple.persistentconnection (1.0 - 1.0) <FFC20BB6-9CF3-39F2-AE5C-8DEE348FE0C1> /System/Library/PrivateFrameworks/PersistentConnection.framework/Versions/A/PersistentConnection
    0x7fff5ee1e000 -     0x7fff5ee4eff7  com.apple.pluginkit.framework (1.0 - 1) <6A417FEF-CEDE-3EE0-93ED-42680A31C886> /System/Library/PrivateFrameworks/PlugInKit.framework/Versions/A/PlugInKit
    0x7fff5fd63000 -     0x7fff5fd7cffb  com.apple.ProtocolBuffer (1 - 274.24.9.16.3) <A2E34123-7CED-378B-A43D-1B98B5B85F5C> /System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer
    0x7fff601bc000 -     0x7fff601c8ff5  com.apple.xpc.RemoteServiceDiscovery (1.0 - 1738.120.8) <9754FC8C-3EAF-3F9B-8A28-A63D472DD6F0> /System/Library/PrivateFrameworks/RemoteServiceDiscovery.framework/Versions/A/RemoteServiceDiscovery
    0x7fff601db000 -     0x7fff60204ff1  com.apple.RemoteViewServices (2.0 - 148) <1C61CFC2-F76F-31E5-BA13-EFD5DC69C8D5> /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
    0x7fff60205000 -     0x7fff6021affa  com.apple.xpc.RemoteXPC (1.0 - 1738.120.8) <BEC43C3B-D472-335D-8D4B-90DCACEC5758> /System/Library/PrivateFrameworks/RemoteXPC.framework/Versions/A/RemoteXPC
    0x7fff60369000 -     0x7fff603a4ff0  com.apple.RunningBoardServices (1.0 - 223.100.31) <9FD1FC53-186A-3327-A359-B0BC7F4360EF> /System/Library/PrivateFrameworks/RunningBoardServices.framework/Versions/A/RunningBoardServices
    0x7fff603a5000 -     0x7fff60443ff3  com.apple.SAObjects (1.0 - 1) <74C1677F-DCA3-3EE9-A6BA-E5DA859CA760> /System/Library/PrivateFrameworks/SAObjects.framework/Versions/A/SAObjects
    0x7fff61dfa000 -     0x7fff61f21ff0  com.apple.Sharing (1526.31 - 1526.31) <2CB07F08-7794-3BF2-9ED5-BAB5C55C9D2C> /System/Library/PrivateFrameworks/Sharing.framework/Versions/A/Sharing
    0x7fff61fcd000 -     0x7fff61fd7ffc  com.apple.performance.SignpostCollection (1.42.2 - 42.2) <3B5EC26F-6EDC-3E88-B148-40BFC0AB0D22> /System/Library/PrivateFrameworks/SignpostCollection.framework/Versions/A/SignpostCollection
    0x7fff61fd9000 -     0x7fff61fd9fff  com.apple.performance.SignpostNotification (1.42.2 - 42.2) <495ACB30-094B-31F4-96DD-E717EEB64B10> /System/Library/PrivateFrameworks/SignpostNotification.framework/Versions/A/SignpostNotification
    0x7fff61fda000 -     0x7fff62020ffb  com.apple.signpost.SignpostSupport (1.42.2 - 42.2) <661D4A8D-CD4F-3EE7-B53E-E0A87F6AA9E0> /System/Library/PrivateFrameworks/SignpostSupport.framework/Versions/A/SignpostSupport
    0x7fff620ec000 -     0x7fff6211fff4  com.apple.siri.SiriInstrumentation (1.0 - 1) <CB61BAC9-F1F7-3554-9151-F87C30D990F3> /System/Library/PrivateFrameworks/SiriInstrumentation.framework/Versions/A/SiriInstrumentation
    0x7fff63334000 -     0x7fff6362aff7  com.apple.SkyLight (1.600.0 - 451.4) <F5B9065A-E975-36D1-8D53-9FBF02171FAB> /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight
    0x7fff63e77000 -     0x7fff63e85ffb  com.apple.SpeechRecognitionCore (6.0.91.2 - 6.0.91.2) <820602AB-117B-3C3E-B20B-819CBC97B7A4> /System/Library/PrivateFrameworks/SpeechRecognitionCore.framework/Versions/A/SpeechRecognitionCore
    0x7fff6455f000 -     0x7fff645a0ff9  com.apple.StreamingZip (1.0 - 1) <EFCDDC94-28EE-3BCA-A105-0A928D15ED8C> /System/Library/PrivateFrameworks/StreamingZip.framework/Versions/A/StreamingZip
    0x7fff64625000 -     0x7fff646b6fe8  com.apple.Symbolication (11.4 - 64535.34.1) <155CBF5A-BF99-3A0F-9818-8A76AE1C64DA> /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
    0x7fff64977000 -     0x7fff64987ff3  com.apple.TCC (1.0 - 1) <FD146B21-6DC0-3B66-BB95-57A5016B1365> /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
    0x7fff64eac000 -     0x7fff64f72ff0  com.apple.TextureIO (3.10.9 - 3.10.9) <E23E05ED-8190-3564-985E-446F15CB0709> /System/Library/PrivateFrameworks/TextureIO.framework/Versions/A/TextureIO
    0x7fff65137000 -     0x7fff6538fff0  com.apple.UIFoundation (1.0 - 662) <DFD3DD4A-E661-3A12-BB02-06898949617D> /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation
    0x7fff6705e000 -     0x7fff6705ffff  com.apple.WatchdogClient.framework (1.0 - 67.120.2) <3B8EBB6B-77D0-317C-A3DB-D0D2E294B18D> /System/Library/PrivateFrameworks/WatchdogClient.framework/Versions/A/WatchdogClient
    0x7fff67c8c000 -     0x7fff67c8fffa  com.apple.dt.XCTTargetBootstrap (1.0 - 16091) <D4F09EC7-C63F-3861-B5DA-3F7C0DFF153D> /System/Library/PrivateFrameworks/XCTTargetBootstrap.framework/Versions/A/XCTTargetBootstrap
    0x7fff67d09000 -     0x7fff67d17ff5  com.apple.audio.caulk (1.0 - 32.3) <7D3D2F91-8B1D-3558-B324-45BDF11306DB> /System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk
    0x7fff68000000 -     0x7fff68004ffb  com.apple.kperf (1.0 - 1) <CC368541-8FF6-3F14-BBA7-F966699DCCD5> /System/Library/PrivateFrameworks/kperf.framework/Versions/A/kperf
    0x7fff68005000 -     0x7fff6800cffb  com.apple.kperfdata (1.0 - 1) <D2060D54-7695-39D3-A4CE-E381753079AB> /System/Library/PrivateFrameworks/kperfdata.framework/Versions/A/kperfdata
    0x7fff6800d000 -     0x7fff68058ff8  com.apple.libktrace (1.0 - 354.100.2) <B2076201-46C6-3926-B0EA-09E87C3757C5> /System/Library/PrivateFrameworks/ktrace.framework/Versions/A/ktrace
    0x7fff68059000 -     0x7fff6805bff3  com.apple.loginsupport (1.0 - 1) <31F02734-1ECF-37D9-9DF6-7C3BC3A324FE> /System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport
    0x7fff6aa4d000 -     0x7fff6aa62ffe  libAccessibility.dylib (2790.70) <0175DCAB-ADCB-3F8F-BD64-E8E51C00825E> /usr/lib/libAccessibility.dylib
    0x7fff6ab3f000 -     0x7fff6ab72ffa  libAudioToolboxUtility.dylib (1104.84) <BB234563-F952-3E7F-B630-4140DB5E0380> /usr/lib/libAudioToolboxUtility.dylib
    0x7fff6ab79000 -     0x7fff6abadfff  libCRFSuite.dylib (48) <02C52318-C537-3FD8-BBC4-E5BD25430652> /usr/lib/libCRFSuite.dylib
    0x7fff6abb0000 -     0x7fff6abbafff  libChineseTokenizer.dylib (34) <04A7CB5A-FD68-398A-A206-33A510C115E7> /usr/lib/libChineseTokenizer.dylib
    0x7fff6ac46000 -     0x7fff6ac48ff7  libDiagnosticMessagesClient.dylib (112) <27220E98-6CE2-33E3-BD48-3CC3CE4AA036> /usr/lib/libDiagnosticMessagesClient.dylib
    0x7fff6ac8e000 -     0x7fff6ae45ffb  libFosl_dynamic.dylib (100.4) <68038226-8CAA-36B5-B5D6-510F900B318D> /usr/lib/libFosl_dynamic.dylib
    0x7fff6ae6c000 -     0x7fff6ae72ff3  libIOReport.dylib (54) <E3A2148E-C5B2-30A8-ACD3-E081DD02BE90> /usr/lib/libIOReport.dylib
    0x7fff6af8a000 -     0x7fff6afaafff  libMobileGestalt.dylib (826.120.5) <1977AD00-533A-31AA-8D74-EA6CB962F668> /usr/lib/libMobileGestalt.dylib
    0x7fff6b11c000 -     0x7fff6b11dfff  libSystem.B.dylib (1281.100.1) <B6FDA8A9-3D2B-3BD5-B5B0-57D311C0FF3D> /usr/lib/libSystem.B.dylib
    0x7fff6b1aa000 -     0x7fff6b1abfff  libThaiTokenizer.dylib (3) <97DC10ED-3C11-3C89-B366-299A644035E7> /usr/lib/libThaiTokenizer.dylib
    0x7fff6b1c3000 -     0x7fff6b1d9fff  libapple_nghttp2.dylib (1.39.2) <B99D7150-D4E2-31A2-A594-36DA4B90D558> /usr/lib/libapple_nghttp2.dylib
    0x7fff6b20e000 -     0x7fff6b280ff7  libarchive.2.dylib (72.100.1) <20B70252-0C4B-3AFD-8C8D-F51921E9D324> /usr/lib/libarchive.2.dylib
    0x7fff6b281000 -     0x7fff6b31afe5  libate.dylib (3.0.1) <C4A5AE88-4E44-36FA-AD3E-0629AF9B94E0> /usr/lib/libate.dylib
    0x7fff6b31e000 -     0x7fff6b31eff3  libauto.dylib (187) <85383E24-1592-36BC-BB39-308B7F1C826E> /usr/lib/libauto.dylib
    0x7fff6b3e4000 -     0x7fff6b3f4ffb  libbsm.0.dylib (60.100.1) <B2331E11-3CBB-3BCF-93A6-12627AE444D0> /usr/lib/libbsm.0.dylib
    0x7fff6b3f5000 -     0x7fff6b401fff  libbz2.1.0.dylib (44) <BF40E193-8856-39B7-98F8-7A17B328B1E9> /usr/lib/libbz2.1.0.dylib
    0x7fff6b402000 -     0x7fff6b454fff  libc++.1.dylib (902.1) <AD0805FE-F98B-3E2F-B072-83782B22DAC9> /usr/lib/libc++.1.dylib
    0x7fff6b455000 -     0x7fff6b46affb  libc++abi.dylib (902) <771E9263-E832-3985-9477-8F1B2D73B771> /usr/lib/libc++abi.dylib
    0x7fff6b46b000 -     0x7fff6b46bfff  libcharset.1.dylib (59) <FF23D4ED-A5AD-3592-9574-48486C7DF85B> /usr/lib/libcharset.1.dylib
    0x7fff6b46c000 -     0x7fff6b47dfff  libcmph.dylib (8) <296A51E6-9661-3AC2-A1C9-F1E3510F91AA> /usr/lib/libcmph.dylib
    0x7fff6b47e000 -     0x7fff6b495fd7  libcompression.dylib (87) <21F37C2E-B9AA-38CE-9023-B763C8828AC6> /usr/lib/libcompression.dylib
    0x7fff6b76f000 -     0x7fff6b785ff7  libcoretls.dylib (167) <9E5D1E0C-03F8-37B6-82A1-0D0597021CB8> /usr/lib/libcoretls.dylib
    0x7fff6b786000 -     0x7fff6b787fff  libcoretls_cfhelpers.dylib (167) <C23BE09B-85D1-3744-9E7B-E2B11ACD5442> /usr/lib/libcoretls_cfhelpers.dylib
    0x7fff6bd44000 -     0x7fff6bda3ff7  libcups.2.dylib (483.6) <FFE8FE67-A6CC-3C38-A9D7-D411D7B562F1> /usr/lib/libcups.2.dylib
    0x7fff6be0f000 -     0x7fff6be18ff1  libdscsym.dylib (243.2) <B88BE20E-E270-34AF-BF8B-525D4D7162A8> /usr/lib/libdscsym.dylib
    0x7fff6be19000 -     0x7fff6be89fff  libdtrace.dylib (338.100.1) <623F7EFB-142B-3B6E-B6F8-D82F1F18D897> /usr/lib/libdtrace.dylib
    0x7fff6bead000 -     0x7fff6beadfff  libenergytrace.dylib (21) <DBF8BDEE-7229-3F06-AC10-A28DCC4243C0> /usr/lib/libenergytrace.dylib
    0x7fff6beae000 -     0x7fff6bec6fff  libexpat.1.dylib (19.60.2) <C9163264-BA81-3CC6-9B8C-48A9A0709DD5> /usr/lib/libexpat.1.dylib
    0x7fff6bed4000 -     0x7fff6bed6fff  libfakelink.dylib (149.1) <122F530F-F10E-3DD5-BBEA-91796BE583F3> /usr/lib/libfakelink.dylib
    0x7fff6bee5000 -     0x7fff6beeafff  libgermantok.dylib (24) <DD279BF6-E906-30D3-A69E-DC797E95F147> /usr/lib/libgermantok.dylib
    0x7fff6beeb000 -     0x7fff6bef4ff7  libheimdal-asn1.dylib (564.100.1) <68FA1BE5-8FFC-3345-8980-8D8629EBA451> /usr/lib/libheimdal-asn1.dylib
    0x7fff6bef5000 -     0x7fff6bfe5fff  libiconv.2.dylib (59) <F58FED71-6CCA-30E8-9A51-13E9B46E568D> /usr/lib/libiconv.2.dylib
    0x7fff6bfe6000 -     0x7fff6c23dfff  libicucore.A.dylib (64260.0.1) <7B9204AC-EA14-3FF3-B6B9-4C85B37EED79> /usr/lib/libicucore.A.dylib
    0x7fff6c257000 -     0x7fff6c258fff  liblangid.dylib (133) <36581D30-1C7B-3A58-AA07-36237BD75E0E> /usr/lib/liblangid.dylib
    0x7fff6c259000 -     0x7fff6c271ff3  liblzma.5.dylib (16) <4DB30730-DBD1-3503-957A-D604049B98F9> /usr/lib/liblzma.5.dylib
    0x7fff6c289000 -     0x7fff6c330ff7  libmecab.dylib (883.11) <66AD729B-2BCC-3347-B9B3-FD88570E884D> /usr/lib/libmecab.dylib
    0x7fff6c331000 -     0x7fff6c593ff1  libmecabra.dylib (883.11) <2AE744D2-AC95-3720-8E66-4F9C7A79384C> /usr/lib/libmecabra.dylib
    0x7fff6c900000 -     0x7fff6c92ffff  libncurses.5.4.dylib (57) <B0B09D08-A7C9-38E9-8BF4-E4F4882F93A6> /usr/lib/libncurses.5.4.dylib
    0x7fff6ca5f000 -     0x7fff6cedbff5  libnetwork.dylib (1880.120.4) <715FB943-BA01-351C-BEA6-121970472985> /usr/lib/libnetwork.dylib
    0x7fff6cf7c000 -     0x7fff6cfaffde  libobjc.A.dylib (787.1) <CA836D3E-4595-33F1-B70C-7E39A3FBBE16> /usr/lib/libobjc.A.dylib
    0x7fff6cfc2000 -     0x7fff6cfc6fff  libpam.2.dylib (25.100.1) <732E8D8E-C630-3EC2-B6C3-A1564E3B68B8> /usr/lib/libpam.2.dylib
    0x7fff6cfc9000 -     0x7fff6cfffff7  libpcap.A.dylib (89.120.1) <CF2ADF15-2D44-3A35-94B4-DD24052F9B23> /usr/lib/libpcap.A.dylib
    0x7fff6d04e000 -     0x7fff6d051ff3  libpmenergy.dylib (214.120.1) <81B5A6ED-372A-3F7D-AADD-FAD0BAF582A0> /usr/lib/libpmenergy.dylib
    0x7fff6d052000 -     0x7fff6d054fff  libpmsample.dylib (214.120.1) <6065A9C1-4A50-36A3-ACD3-E1C30C988AE1> /usr/lib/libpmsample.dylib
    0x7fff6d083000 -     0x7fff6d09bfff  libresolv.9.dylib (67.40.1) <B0F5D204-7EF2-3B0B-90EF-BB4D196FCC62> /usr/lib/libresolv.9.dylib
    0x7fff6d0f7000 -     0x7fff6d2e1ff7  libsqlite3.dylib (308.5) <AF518115-4AD1-39F2-9B82-E2640E2221E1> /usr/lib/libsqlite3.dylib
    0x7fff6d456000 -     0x7fff6d457ff5  libsysmon.dylib (102) <75DDF324-505A-3064-B287-299EAE6F879E> /usr/lib/libsysmon.dylib
    0x7fff6d532000 -     0x7fff6d535ffb  libutil.dylib (57) <D33B63D2-ADC2-38BD-B8F2-24056C41E07B> /usr/lib/libutil.dylib
    0x7fff6d536000 -     0x7fff6d543ff7  libxar.1.dylib (425.2) <943A4CBB-331B-3A04-A11F-A2301189D40B> /usr/lib/libxar.1.dylib
    0x7fff6d549000 -     0x7fff6d62bff7  libxml2.2.dylib (33.3) <262EF7C6-7D83-3C01-863F-36E97F5ACD34> /usr/lib/libxml2.2.dylib
    0x7fff6d62f000 -     0x7fff6d657fff  libxslt.1.dylib (16.9) <86FE4382-BD77-3C19-A678-11EBCD70685A> /usr/lib/libxslt.1.dylib
    0x7fff6d658000 -     0x7fff6d66aff3  libz.1.dylib (76) <DB120508-3BED-37A8-B439-5235EAB4618A> /usr/lib/libz.1.dylib
    0x7fff6d720000 -     0x7fff6d73672f  libswiftAppKit.dylib (??? - ???) <DCAABA1B-4CC1-34CB-99DA-C4D6E35424C2> /usr/lib/swift/libswiftAppKit.dylib
    0x7fff6d760000 -     0x7fff6db15437  libswiftCore.dylib (5.2 - 1103.8.25.8) <1A2096A5-7C7B-3262-9441-E8120840FC15> /usr/lib/swift/libswiftCore.dylib
    0x7fff6db22000 -     0x7fff6db2ad7f  libswiftCoreData.dylib (??? - ???) <237055B7-F44E-3E7A-92A8-E476B32EAB85> /usr/lib/swift/libswiftCoreData.dylib
    0x7fff6db2b000 -     0x7fff6db2dfff  libswiftCoreFoundation.dylib (??? - ???) <29922ED7-FE34-3C9D-A6E0-AF7B444FCD1E> /usr/lib/swift/libswiftCoreFoundation.dylib
    0x7fff6db2e000 -     0x7fff6db3bfff  libswiftCoreGraphics.dylib (??? - ???) <CEAA40BA-A222-3F81-9D05-45FE30F35F02> /usr/lib/swift/libswiftCoreGraphics.dylib
    0x7fff6db3c000 -     0x7fff6db3fffb  libswiftCoreImage.dylib (??? - ???) <68914185-B578-3F02-896C-16CFB7B1D73D> /usr/lib/swift/libswiftCoreImage.dylib
    0x7fff6db9a000 -     0x7fff6dba0fff  libswiftDarwin.dylib (??? - ???) <ABA454AA-C490-3104-ACC7-B07768AE147A> /usr/lib/swift/libswiftDarwin.dylib
    0x7fff6dba1000 -     0x7fff6dbb8cdf  libswiftDispatch.dylib (??? - ???) <EFF1B143-5420-3778-9383-C74A33DEE508> /usr/lib/swift/libswiftDispatch.dylib
    0x7fff6dbb9000 -     0x7fff6dd3e277  libswiftFoundation.dylib (??? - ???) <6CAC5222-75DA-3141-8C79-B2418CBCB633> /usr/lib/swift/libswiftFoundation.dylib
    0x7fff6dd4d000 -     0x7fff6dd4fff3  libswiftIOKit.dylib (??? - ???) <42BB4045-2AD5-3988-8BEE-C730D8B62339> /usr/lib/swift/libswiftIOKit.dylib
    0x7fff6dd65000 -     0x7fff6dd6cf0f  libswiftMetal.dylib (??? - ???) <1FC8C8E0-6451-3A67-B7BA-F1A03386A414> /usr/lib/swift/libswiftMetal.dylib
    0x7fff6dde8000 -     0x7fff6ddebfe7  libswiftObjectiveC.dylib (??? - ???) <2AD71631-C77D-3899-ACDE-1C92A53B1FCB> /usr/lib/swift/libswiftObjectiveC.dylib
    0x7fff6ddfd000 -     0x7fff6de02fbf  libswiftQuartzCore.dylib (??? - ???) <70193B07-AF68-3585-B482-778C527E94AD> /usr/lib/swift/libswiftQuartzCore.dylib
    0x7fff6deec000 -     0x7fff6deeefff  libswiftXPC.dylib (??? - ???) <7483E9F4-C878-37A8-BFC4-0E4CCFD30B85> /usr/lib/swift/libswiftXPC.dylib
    0x7fff6df18000 -     0x7fff6df1dff3  libcache.dylib (83) <A5ECC751-A681-30D8-B33C-D192C15D25C8> /usr/lib/system/libcache.dylib
    0x7fff6df1e000 -     0x7fff6df29fff  libcommonCrypto.dylib (60165.120.1) <C321A74A-AA91-3785-BEBF-BEDC6975026C> /usr/lib/system/libcommonCrypto.dylib
    0x7fff6df2a000 -     0x7fff6df31fff  libcompiler_rt.dylib (101.2) <652A6012-7E5C-3F4F-9438-86BC094526F3> /usr/lib/system/libcompiler_rt.dylib
    0x7fff6df32000 -     0x7fff6df3bff7  libcopyfile.dylib (166.40.1) <40113A69-A81C-3397-ADC6-1D16B9A22C3E> /usr/lib/system/libcopyfile.dylib
    0x7fff6df3c000 -     0x7fff6dfcefe3  libcorecrypto.dylib (866.120.3) <5E4B0E50-24DD-3E04-9374-EDA9FFD6257B> /usr/lib/system/libcorecrypto.dylib
    0x7fff6e0db000 -     0x7fff6e11bff0  libdispatch.dylib (1173.100.2) <201EDBF3-0B36-31BA-A7CB-443CE35C05D4> /usr/lib/system/libdispatch.dylib
    0x7fff6e11c000 -     0x7fff6e152fff  libdyld.dylib (750.5) <7E711A46-5E4D-393C-AEA6-440E2A5CCD0C> /usr/lib/system/libdyld.dylib
    0x7fff6e153000 -     0x7fff6e153ffb  libkeymgr.dylib (30) <52662CAA-DB1F-30A3-BE13-D6274B1A6D7B> /usr/lib/system/libkeymgr.dylib
    0x7fff6e154000 -     0x7fff6e160ff3  libkxld.dylib (6153.121.2) <5EBB4886-C7B6-31D6-AA63-D861B2D58FCE> /usr/lib/system/libkxld.dylib
    0x7fff6e161000 -     0x7fff6e161ff7  liblaunch.dylib (1738.120.8) <07CF647B-F9DC-3907-AD98-2F85FCB34A72> /usr/lib/system/liblaunch.dylib
    0x7fff6e162000 -     0x7fff6e167ff7  libmacho.dylib (959.0.1) <D91DFF00-E22F-3796-8A1C-4C1F5F8FA03C> /usr/lib/system/libmacho.dylib
    0x7fff6e168000 -     0x7fff6e16aff3  libquarantine.dylib (110.40.3) <D3B7D02C-7646-3FB4-8529-B36DCC2419EA> /usr/lib/system/libquarantine.dylib
    0x7fff6e16b000 -     0x7fff6e16cff7  libremovefile.dylib (48) <B5E88D9B-C2BE-3496-BBB2-C996317E18A3> /usr/lib/system/libremovefile.dylib
    0x7fff6e16d000 -     0x7fff6e184ff3  libsystem_asl.dylib (377.60.2) <1170348D-2491-33F1-AA79-E2A05B4A287C> /usr/lib/system/libsystem_asl.dylib
    0x7fff6e185000 -     0x7fff6e185ff7  libsystem_blocks.dylib (74) <7AFBCAA6-81BE-36C3-8DB0-AAE0A4ACE4C5> /usr/lib/system/libsystem_blocks.dylib
    0x7fff6e186000 -     0x7fff6e20dfff  libsystem_c.dylib (1353.100.2) <935DDCE9-4ED0-3F79-A05A-A123DDE399CC> /usr/lib/system/libsystem_c.dylib
    0x7fff6e20e000 -     0x7fff6e211ffb  libsystem_configuration.dylib (1061.120.2) <EA9BC2B1-5001-3463-9FAF-39FF61CAC87C> /usr/lib/system/libsystem_configuration.dylib
    0x7fff6e212000 -     0x7fff6e215fff  libsystem_coreservices.dylib (114) <3D0A3AA8-8415-37B2-AAE3-66C03BCE8B55> /usr/lib/system/libsystem_coreservices.dylib
    0x7fff6e216000 -     0x7fff6e21efff  libsystem_darwin.dylib (1353.100.2) <6EEC9975-EE3B-3C95-AA5B-030FD10587BC> /usr/lib/system/libsystem_darwin.dylib
    0x7fff6e21f000 -     0x7fff6e226fff  libsystem_dnssd.dylib (1096.100.3) <0115092A-E61B-317D-8670-41C7C34B1A82> /usr/lib/system/libsystem_dnssd.dylib
    0x7fff6e227000 -     0x7fff6e228ffb  libsystem_featureflags.dylib (17) <AFDB5095-0472-34AC-BA7E-497921BF030A> /usr/lib/system/libsystem_featureflags.dylib
    0x7fff6e229000 -     0x7fff6e276ff7  libsystem_info.dylib (538) <851693E9-C079-3547-AD41-353F8C248BE8> /usr/lib/system/libsystem_info.dylib
    0x7fff6e277000 -     0x7fff6e2a3ff7  libsystem_kernel.dylib (6153.121.2) <9F9902C9-A46F-3CA9-B7F9-5CCFE98FBF75> /usr/lib/system/libsystem_kernel.dylib
    0x7fff6e2a4000 -     0x7fff6e2ebfff  libsystem_m.dylib (3178) <436CFF76-6A99-36F2-A3B6-8D017396A050> /usr/lib/system/libsystem_m.dylib
    0x7fff6e2ec000 -     0x7fff6e313fff  libsystem_malloc.dylib (283.100.6) <D4BA7DF2-57AC-33B0-B948-A688EE43C799> /usr/lib/system/libsystem_malloc.dylib
    0x7fff6e314000 -     0x7fff6e321ffb  libsystem_networkextension.dylib (1095.120.6) <6DE86DB0-8CD2-361E-BD6A-A34282B47847> /usr/lib/system/libsystem_networkextension.dylib
    0x7fff6e322000 -     0x7fff6e32bff7  libsystem_notify.dylib (241.100.2) <7E9E2FC8-DF26-340C-B196-B81B11850C46> /usr/lib/system/libsystem_notify.dylib
    0x7fff6e32c000 -     0x7fff6e334fef  libsystem_platform.dylib (220.100.1) <736920EA-6AE0-3B1B-BBDA-7DCDF0C229DF> /usr/lib/system/libsystem_platform.dylib
    0x7fff6e335000 -     0x7fff6e33ffff  libsystem_pthread.dylib (416.100.3) <77488669-19A3-3993-AD65-CA5377E2475A> /usr/lib/system/libsystem_pthread.dylib
    0x7fff6e340000 -     0x7fff6e344ff3  libsystem_sandbox.dylib (1217.120.7) <20C93D69-6452-3C82-9521-8AE54345C66F> /usr/lib/system/libsystem_sandbox.dylib
    0x7fff6e345000 -     0x7fff6e347fff  libsystem_secinit.dylib (62.100.2) <E851113D-D5B1-3FB0-9D29-9C7647A71961> /usr/lib/system/libsystem_secinit.dylib
    0x7fff6e348000 -     0x7fff6e34fffb  libsystem_symptoms.dylib (1238.120.1) <25C3866B-004E-3621-9CD3-B1E9C4D887EB> /usr/lib/system/libsystem_symptoms.dylib
    0x7fff6e350000 -     0x7fff6e366ff2  libsystem_trace.dylib (1147.120) <A1ED1D3A-5FAD-3559-A1D6-1BE4E1C5756A> /usr/lib/system/libsystem_trace.dylib
    0x7fff6e368000 -     0x7fff6e36dff7  libunwind.dylib (35.4) <253A12E2-F88F-3838-A666-C5306F833CB8> /usr/lib/system/libunwind.dylib
    0x7fff6e36e000 -     0x7fff6e3a3ffe  libxpc.dylib (1738.120.8) <68D433B6-DCFF-385D-8620-F847FB7D4A5A> /usr/lib/system/libxpc.dylib

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 1
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 7078
    thread_create: 0
    thread_set_state: 12

VM Region Summary:
ReadOnly portion of Libraries: Total=591.0M resident=0K(0%) swapped_out_or_unallocated=591.0M(100%)
Writable regions: Total=107.4M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=107.4M(100%)
 
                                VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
Activity Tracing                   256K        1 
Dispatch continuations            24.0M        1 
Kernel Alloc Once                    8K        1 
MALLOC                            65.4M       24 
MALLOC guard page                   16K        3 
Performance tool data             8208K        1         not counted in TOTAL below
STACK GUARD                       56.0M        4 
Stack                             9752K        4 
VM_ALLOCATE                          4K        1 
__DATA                            29.9M      323 
__DATA_CONST                       336K       17 
__FONT_DATA                          4K        1 
__LINKEDIT                       394.7M       17 
__OBJC_RO                         32.2M        1 
__OBJC_RW                         1892K        2 
__TEXT                           196.4M      312 
__UNICODE                          564K        1 
mapped file                       27.5M        3 
shared memory                      596K        9 
===========                     =======  ======= 
TOTAL                            839.1M      725 

missing symbols needed for SPM

CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol OCSP_REQUEST_new referenced in function $s25PackageCollectionsSigning17CertificatePolicyPAAE6verify9certChain11anchorCerts0F4Date10httpClient18observabilityScope13callbackQueue0P0ySayAA20BoringSSLCertificateCG_ANSg10Foundation0K0VSg6Basics10HTTPClientVSgAT013ObservabilityO0C8Dispatch0xQ0Cys6ResultOyyts5Error_pGctFsA3__pSgyXEfU0_s5Int32VA7__s13OpaquePointerVSgtcfU2_
CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol OCSP_request_add0_id referenced in function $s25PackageCollectionsSigning17CertificatePolicyPAAE6verify9certChain11anchorCerts0F4Date10httpClient18observabilityScope13callbackQueue0P0ySayAA20BoringSSLCertificateCG_ANSg10Foundation0K0VSg6Basics10HTTPClientVSgAT013ObservabilityO0C8Dispatch0xQ0Cys6ResultOyyts5Error_pGctFsA3__pSgyXEfU0_s5Int32VA7__s13OpaquePointerVSgtcfU2_
CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol i2d_OCSP_REQUEST_bio referenced in function $s25PackageCollectionsSigning17CertificatePolicyPAAE6verify9certChain11anchorCerts0F4Date10httpClient18observabilityScope13callbackQueue0P0ySayAA20BoringSSLCertificateCG_ANSg10Foundation0K0VSg6Basics10HTTPClientVSgAT013ObservabilityO0C8Dispatch0xQ0Cys6ResultOyyts5Error_pGctFsA3__pSgyXEfU0_s5Int32VA7__s13OpaquePointerVSgtcfU2_
CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol OCSP_REQUEST_free referenced in function $s25PackageCollectionsSigning17CertificatePolicyPAAE6verify9certChain11anchorCerts0F4Date10httpClient18observabilityScope13callbackQueue0P0ySayAA20BoringSSLCertificateCG_ANSg10Foundation0K0VSg6Basics10HTTPClientVSgAT013ObservabilityO0C8Dispatch0xQ0Cys6ResultOyyts5Error_pGctFsA3__pSgyXEfU0_s5Int32VA7__s13OpaquePointerVSgtcfU2_
CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol d2i_OCSP_RESPONSE_bio referenced in function $s25PackageCollectionsSigning19BoringSSLOCSPClient33_29757BB9C69218A3DEB08DF34F8C4BEFLLV11checkStatus11certificate6issuer11anchorCerts10httpClient13callbackQueue0V0yAA0D14SSLCertificateC_AMSayAMGSg6Basics10HTTPClientV8Dispatch08DispatchW0Cys6ResultOyyts5Error_pGctF15processResponseL__8cacheKeyyAP0Z8ResponseV_AD8CacheKeyVtFTf4nnnnx_n
CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol OCSP_response_get1_basic referenced in function $s25PackageCollectionsSigning19BoringSSLOCSPClient33_29757BB9C69218A3DEB08DF34F8C4BEFLLV11checkStatus11certificate6issuer11anchorCerts10httpClient13callbackQueue0V0yAA0D14SSLCertificateC_AMSayAMGSg6Basics10HTTPClientV8Dispatch08DispatchW0Cys6ResultOyyts5Error_pGctF15processResponseL__8cacheKeyyAP0Z8ResponseV_AD8CacheKeyVtFTf4nnnnx_n
CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol OCSP_response_status referenced in function $s25PackageCollectionsSigning19BoringSSLOCSPClient33_29757BB9C69218A3DEB08DF34F8C4BEFLLV11checkStatus11certificate6issuer11anchorCerts10httpClient13callbackQueue0V0yAA0D14SSLCertificateC_AMSayAMGSg6Basics10HTTPClientV8Dispatch08DispatchW0Cys6ResultOyyts5Error_pGctF15processResponseL__8cacheKeyyAP0Z8ResponseV_AD8CacheKeyVtFTf4nnnnx_n
CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol OCSP_basic_verify referenced in function $s25PackageCollectionsSigning19BoringSSLOCSPClient33_29757BB9C69218A3DEB08DF34F8C4BEFLLV11checkStatus11certificate6issuer11anchorCerts10httpClient13callbackQueue0V0yAA0D14SSLCertificateC_AMSayAMGSg6Basics10HTTPClientV8Dispatch08DispatchW0Cys6ResultOyyts5Error_pGctF15processResponseL__8cacheKeyyAP0Z8ResponseV_AD8CacheKeyVtFTf4nnnnx_n
CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol OCSP_BASICRESP_free referenced in function $s25PackageCollectionsSigning19BoringSSLOCSPClient33_29757BB9C69218A3DEB08DF34F8C4BEFLLV11checkStatus11certificate6issuer11anchorCerts10httpClient13callbackQueue0V0yAA0D14SSLCertificateC_AMSayAMGSg6Basics10HTTPClientV8Dispatch08DispatchW0Cys6ResultOyyts5Error_pGctF15processResponseL__8cacheKeyyAP0Z8ResponseV_AD8CacheKeyVtFTf4nnnnx_n
CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol OCSP_RESPONSE_free referenced in function $s25PackageCollectionsSigning19BoringSSLOCSPClient33_29757BB9C69218A3DEB08DF34F8C4BEFLLV11checkStatus11certificate6issuer11anchorCerts10httpClient13callbackQueue0V0yAA0D14SSLCertificateC_AMSayAMGSg6Basics10HTTPClientV8Dispatch08DispatchW0Cys6ResultOyyts5Error_pGctF15processResponseL__8cacheKeyyAP0Z8ResponseV_AD8CacheKeyVtFTf4nnnnx_n
CertificatePolicy.swift.obj : error LNK2019: unresolved external symbol OCSP_cert_to_id referenced in function $s25PackageCollectionsSigning19BoringSSLOCSPClient33_29757BB9C69218A3DEB08DF34F8C4BEFLLV11checkStatus11certificate6issuer11anchorCerts10httpClient13callbackQueue0V0yAA0D14SSLCertificateC_AMSayAMGSg6Basics10HTTPClientV8Dispatch08DispatchW0Cys6ResultOyyts5Error_pGctFyAWyAP0Z8ResponseVsAX_pGcfU3_yA0_cfU_TA
bin\PackageCollectionsSigning.dll : fatal error LNK1120: 11 unresolved externals

New API Proposal: X.509 Certificate Support

New API Proposal: X.509 Certificate Support

Motivation:

A big part of cryptography and security for multiple internet protocols is the X.509 standard, defining public key certificate formats. Not having the possibility to create or read certificates is a real bummer.

It would be a great addition:

  • Identity binding to a public key using digital signatures
  • Client certificate authentication, useful for Swift servers and clients
  • Certificate Authority (CA) support
  • Pretty Good Privacy (PGP) support
  • SSL/TLS support

Most of the core components to support X.509 certificates are already (partially) implemented:

  • ASN.1 support to encode and decode certificates and it's attributes
  • ECC/RSA signatures to sign CSR's and verify certificates

I would highly recommend also adding the certificate signing request (CSR), part of the PKCS#10 spec, to make the client certificate authentication and identities accessible more easily.

Importance:

X.509 is of great importance in cryptography:

  • It provides clients secure access to information and resources
  • It provides a way to prevent man-in-the-middle attacks (MITM)
  • It is an enabler for CA's
  • It is an enabler for PGP
  • It is an enabler for the public key infrastructure (PKI)

Support for basic RSA encrypt/decrypt operation

New API Proposal: RSA encrypt/decrypt support in _CryptoExtras

Motivation:

While it is always desirable to encourage motion away from outdated and security-questionable algorithms like RSA, in practical usage it is not always possible to avoid requiring them. In the case of a MySQL protocol client, support for the caching_sha2_password auth plugin (the default in MySQL 8.0) on a non-TLS connection (often desired for speed in secure environments such as a LAN) requires the ability to perform an RSA encrypt operation using a public key provided by the MySQL server. (I propose including the corresponding RSA "decrypt with private key" operation as a matter of symmetry.)

Importance:

It is not possible to implement this functionality with existing API short of embedding an entire copy of BoringSSL in the protocol client package, which negates the usefulness of the swift-crypto package outright (to say nothing of the cost in duplicated code and build times).

A working implementation is available here.

Add SwiftWasm support / remove need for BoringSSL networking methods

New API Proposal: SwiftWasm support

Motivation:

Hey! I try to compile swift-crypto with SwiftWasm, using command:

swift build --triple wasm32-unknown-wasi

Which produces the following compilation error:

~/Developer/Swift/swift-crypto/Sources/CCryptoBoringSSL/crypto/bio/socket_helper.c:28:10: fatal error: 'netdb.h' file not found
#include <netdb.h>
         ^~~~~~~~~
.
[358/406] Compiling curve25519.c

Which is caused by the fact that networking is not standardized/supported by WebAssembly (issue from April 2019).

However, this networking part of BoringSSL does not really seem needed for me to be able to offline be performing crypto primitives!

So feels like we should be able to skip these parts of BoringSSL?

I propose that we change the wrapper around BoringSSL so that we can use just what we need in BoringSSL so that hopefully swift-crypto can work with SwiftWasm.

Importance:

WebAssembly is on the rise (Google Trends) and SwiftWasm seems to be the primary project bringing Wasm support to Swift. If it is possible to make swift-crypto work with SwiftWasm with a small amount of work I think it would be very beneficial to the Swift and WebAssembly community.

Build failure with BUILD_LIBRARY_FOR_DISTRIBUTION=YES

When will the support for visionOS be provided, for both simulator and physical device?

We have a SDK which consumes swift-cryto as a package dependency (v 2.1.0). We are updating our codebase to support the new OS from Apple. The SDK builds for iOS and MacCatalyst on intel and M1 machines.

Right now when i build from cli with command:

xcodebuild -workspace MySDK.xcworkspace -configuration Debug -sdk xrsimulator build -derivedDataPath ./out -scheme MySDK -destination "generic/platform=visionOS Simulator,OS=latest,name=Apple Vision Pro" "ARCHS=\x86_64 \arm64

if fails with the error:

no such module 'CCryptoBoringSSL'
@_implementationOnly import CCryptoBoringSSL

Umbrella: Update Wycheproof test vectors to v1

This issue is an umbrella issue where we can keep track of my efforts upgrading all Wycheproof test vectors from v0 to v1.

  • aes_gcm - #156
  • chacha20_polt1305 - #157
  • ecdh_secp256r1_test - #160
  • ecdh_secp256r1_ecpoint_test - #158
  • ecdh_secp384r1_test - #162
  • ecdh_secp384r1_ecpoint_test - #161
  • ecdh_secp521r1_test - #163
  • ecdh_secp521r1_ecpoint_test - #164
  • ecdsa_secp256r1_sha256_test open PR #166
  • ecdsa_secp256r1_sha512_test open PR #166
  • ecdsa_secp384r1_sha384_test open PR #166
  • ecdsa_secp384r1_sha512_test open PR #166
  • ecdsa_secp521r1_sha512_test open PR #166
  • eddsa_test (renamed -> ed25519_test) - #159
  • x25519_test - #155

Consider adding `_CRT_SECURE_NO_WARNINGS` to disable warnings on Windows.

New Issue Checklist

Expected behavior

Warning free build on Windows.

Actual behavior

Some code uses what Microsoft has marked as "insecure CRT functions". This produces a lot of warning output on Windows. Due to SPM's inability to pass cSettings to dependencies, I can't disable these warnings.

Please add .define("_CRT_SECURE_NO_WARNINGS") to your Package.swift to disable the warnings.

swift-crypto\Sources\CCryptoBoringSSL\crypto\x509v3\v3_utl.c:1173:7: warning: 'sscanf' is deprecated: This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. [-Wdeprecated-declarations]
  if (sscanf(in, "%d.%d.%d.%d", &a0, &a1, &a2, &a3) != 4) {
      ^
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\stdio.h:2239:20: note: 'sscanf' has been explicitly marked deprecated here
    _Check_return_ _CRT_INSECURE_DEPRECATE(sscanf_s)
                   ^
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vcruntime.h:355:55: note: expanded from macro '_CRT_INSECURE_DEPRECATE'
        #define _CRT_INSECURE_DEPRECATE(_Replacement) _CRT_DEPRECATE_TEXT(    \
                                                      ^
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vcruntime.h:345:47: note: expanded from macro '_CRT_DEPRECATE_TEXT'
#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text))

Steps to reproduce

  1. Build on Windows using SPM.

If possible, minimal yet complete reproducer code (or URL to code)

Swift Crypto version/commit hash

33a20e6

Environment

Stand in the root of the repo and run ./scripts/environment.sh and paste the output below

The script doesn't do anything on Windows, but here's some info:

PS C:...\swift-crypto> swift --version
compnerd.org Swift version 5.9-dev (LLVM cb96a4a81f9ea98, Swift a57c97bb1a6268e)
Target: x86_64-unknown-windows-msvc

PS C:...\swift-crypto> systeminfo | Select-String -Pattern "OS Name"
OS Name: Microsoft Windows 11 Pro

How to set CBC padding behavior?

Question Checklist

Question Subject

I'm currently using CryptoSwift for CBC de-/encryption and I'd like to move that to swift-crypto.
For my use-case I have to disable automatic padding, is that possible?

Question Description

Currently I have the following code to decrypt a CBC encrypted payload sent from an Oracle db server during authenticating:

func decryptCBC(_ key: [UInt8], _ encryptedText: [UInt8]) throws -> [UInt8] {
    let iv = [UInt8](repeating: 0, count: 16)
    let aes = try AES(key: key, blockMode: CBC(iv: iv), padding: .noPadding)
    return try aes.decrypt(encryptedText)
}

I tried migrating it to swift-crypto and now it does automatic padding and fails with CryptoKitError.incorrectParameterSize, when trying to trim the padding:

func decryptCBC(_ key: [UInt8], _ encryptedText: [UInt8]) throws -> Data {
    let iv = [UInt8](repeating: 0, count: 16)
    return try AES._CBC.decrypt(encryptedText, using: .init(data: key), iv: AES._CBC.IV(ivBytes: iv)) // noPadding equivalent?
}

I guess I'll have the same problem on encryption.

// current (CryptoSwift):
func encryptCBC(_ key: [UInt8], _ plainText: [UInt8], zeros: Bool = false) throws -> [UInt8] {
    var plainText = plainText
    let blockSize = 16
    let iv = [UInt8](repeating: 0, count: blockSize)
    let n = blockSize - plainText.count % blockSize
    if n != 0, !zeros {
        plainText += Array<UInt8>(repeating: UInt8(n), count: n)
    }
    let aes = try AES(key: key, blockMode: CBC(iv: iv), padding: zeros ? .zeroPadding : .noPadding)
    var encryptor = try aes.makeEncryptor()
    return try encryptor.update(withBytes: plainText, isLast: true) + encryptor.finish()
}

// new (swift-crypto):
func encryptCBC(_ key: [UInt8], _ plainText: [UInt8], zeros: Bool = false) throws -> Data {
    var plainText = plainText
    let blockSize = 16
    let iv = [UInt8](repeating: 0, count: blockSize)
    let n = blockSize - plainText.count % blockSize
    if n != 0, !zeros {
        plainText += Array<UInt8>(repeating: UInt8(n), count: n)
    }
    return try AES._CBC.encrypt(plainText, using: .init(data: key), iv: AES._CBC.IV(ivBytes: iv)) // set padding behavior?
}

This is the related code: https://github.com/lovetodream/oracle-nio/blob/main/Sources/OracleNIO/Helper/Crypto.swift

Inconsistent Nonce API

The current AES.GCM.SealedBox API is inconsistent:

let message = "foo".data(using: .utf8)!
let key = SymmetricKey(size: .bits256)
let nonce = try AES.GCM.Nonce(data: Data(repeating: 0, count: 12))
let seal = try AES.GCM.seal(message, using: key, nonce: nonce)
let sealData = seal.combined
  1. sealData is Data? and nil if nonce.count != 12.
  2. AES.GCM.Nonce(data: Data) only allows data of data.count == 12, otherwise it will throw an error.

Since it is not possible to create a nonce with a size other than 12, seal.combined can never return nil and should not be Data? but Data.

Failure to link on arm64

New Issue Checklist

Expected behavior

The library should link.

Actual behavior

Linking fails with the "Undefined symbols for architecture arm64" error

Steps to reproduce

  1. Build Swift Crypto as a part of the Swift toolchain build.
  2. The build fails on this command:
/usr/bin/swiftc -output-file-map Sources/Crypto/CMakeFiles/Crypto.dir/Debug/output-file-map.json -incremental -j 8 -emit-library -o lib/libCrypto.dylib -module-name Crypto -module-link-name Crypto -emit-module -emit-module-path swift/Crypto.swiftmodule -emit-dependencies -DCRYPTO_IN_SWIFTPM_FORCE_BUILD_API -DCrypto_EXPORTS -sdk /Applications/Xcode-12.4.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk -module-cache-path "/Users/max/Documents/swiftwasm-source/host-build/Ninja-Release/swiftpm-macosx-arm64/arm64-apple-macosx/swift-crypto/module-cache" -g -sdk /Applications/Xcode-12.4.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk -I /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/CCryptoBoringSSL/include -I /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/CCryptoBoringSSLShims/include -I swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/AEADs/AES/GCM/AES-GCM.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/AEADs/AES/GCM/BoringSSL/AES-GCM_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/AEADs/ChachaPoly/BoringSSL/ChaChaPoly_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/AEADs/ChachaPoly/ChaChaPoly.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/AEADs/Cipher.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/AEADs/Nonces.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/ASN1.swift "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/Basic ASN1 Types/ASN1BitString.swift" "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/Basic ASN1 Types/ASN1Identifier.swift" "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/Basic ASN1 Types/ASN1Integer.swift" "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/Basic ASN1 Types/ASN1OctetString.swift" "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/Basic ASN1 Types/ArraySliceBigint.swift" "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/Basic ASN1 Types/ObjectIdentifier.swift" /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/ECDSASignature.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/PEMDocument.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/PKCS8PrivateKey.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/SEC1PrivateKey.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/ASN1/SubjectPublicKeyInfo.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/CryptoKitErrors.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Digests/BoringSSL/Digest_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Digests/Digest.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Digests/Digests.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Digests/HashFunctions.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Digests/HashFunctions_SHA2.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Insecure/Insecure.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Insecure/Insecure_HashFunctions.swift "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Key Agreement/BoringSSL/ECDH_boring.swift" "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Key Agreement/DH.swift" "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Key Agreement/ECDH.swift" "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Key Derivation/HKDF.swift" /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Keys/EC/BoringSSL/Ed25519_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Keys/EC/BoringSSL/EllipticCurvePoint_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Keys/EC/BoringSSL/EllipticCurve_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Keys/EC/BoringSSL/NISTCurvesKeys_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Keys/EC/BoringSSL/X25519Keys_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Keys/EC/Curve25519.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Keys/EC/Ed25519.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Keys/EC/NISTCurvesKeys.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Keys/EC/X25519Keys.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Keys/Symmetric/SymmetricKeys.swift "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Message Authentication Codes/HMAC/HMAC.swift" "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Message Authentication Codes/MACFunctions.swift" "/Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Message Authentication Codes/MessageAuthenticationCode.swift" /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/PRF/AES.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Signatures/BoringSSL/ECDSASignature_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Signatures/BoringSSL/ECDSA_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Signatures/BoringSSL/EdDSA_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Signatures/ECDSA.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Signatures/EdDSA.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Signatures/Signature.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Util/BoringSSL/ArbitraryPrecisionInteger_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Util/BoringSSL/CryptoKitErrors_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Util/BoringSSL/FiniteFieldArithmeticContext_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Util/BoringSSL/RNG_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Util/BoringSSL/SafeCompare_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Util/BoringSSL/Zeroization_boring.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Util/PrettyBytes.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Util/SafeCompare.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Util/SecureBytes.swift /Users/max/Documents/swiftwasm-source/swift-crypto/Sources/Crypto/Util/Zeroization.swift  -Xlinker -install_name -Xlinker @rpath/libCrypto.dylib  -L /Users/max/Documents/swiftwasm-source/host-build/Ninja-Release/swiftpm-macosx-arm64/arm64-apple-macosx/swift-crypto/lib  -L /Users/max/Documents/swiftwasm-source/host-build/Ninja-Release/swiftpm-macosx-arm64/arm64-apple-macosx/swift-crypto/lib  -L /Users/max/Documents/swiftwasm-source/host-build/Ninja-Release/swiftpm-macosx-arm64/arm64-apple-macosx/swift-crypto/lib lib/libCCryptoBoringSSL.a  lib/libCCryptoBoringSSLShims.a  lib/libCCryptoBoringSSL.a

The full error message is:

Undefined symbols for architecture arm64:
  "_CCryptoBoringSSL_ChaCha20_ctr32", referenced from:
      _CCryptoBoringSSL_CRYPTO_chacha_20 in libCCryptoBoringSSL.a(chacha.c.o)
  "_CCryptoBoringSSL_aes_hw_cbc_encrypt", referenced from:
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_aes_hw_ctr32_encrypt_blocks", referenced from:
      _CCryptoBoringSSL_aes_ctr_set_key in libCCryptoBoringSSL.a(e_aes.c.o)
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_aes_hw_decrypt", referenced from:
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_aes_hw_encrypt", referenced from:
      _CCryptoBoringSSL_aes_ctr_set_key in libCCryptoBoringSSL.a(e_aes.c.o)
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_aes_hw_set_decrypt_key", referenced from:
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_aes_hw_set_encrypt_key", referenced from:
      _CCryptoBoringSSL_aes_ctr_set_key in libCCryptoBoringSSL.a(e_aes.c.o)
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_bn_mul_mont", referenced from:
      _CCryptoBoringSSL_BN_mod_mul_montgomery in libCCryptoBoringSSL.a(montgomery.c.o)
      _CCryptoBoringSSL_bn_mod_mul_montgomery_small in libCCryptoBoringSSL.a(montgomery.c.o)
  "_CCryptoBoringSSL_gcm_ghash_neon", referenced from:
      _CCryptoBoringSSL_CRYPTO_ghash_init in libCCryptoBoringSSL.a(gcm.c.o)
  "_CCryptoBoringSSL_gcm_ghash_v8", referenced from:
      _CCryptoBoringSSL_CRYPTO_ghash_init in libCCryptoBoringSSL.a(gcm.c.o)
  "_CCryptoBoringSSL_gcm_gmult_neon", referenced from:
      _CCryptoBoringSSL_CRYPTO_ghash_init in libCCryptoBoringSSL.a(gcm.c.o)
  "_CCryptoBoringSSL_gcm_gmult_v8", referenced from:
      _CCryptoBoringSSL_CRYPTO_ghash_init in libCCryptoBoringSSL.a(gcm.c.o)
  "_CCryptoBoringSSL_gcm_init_neon", referenced from:
      _CCryptoBoringSSL_CRYPTO_ghash_init in libCCryptoBoringSSL.a(gcm.c.o)
  "_CCryptoBoringSSL_gcm_init_v8", referenced from:
      _CCryptoBoringSSL_CRYPTO_ghash_init in libCCryptoBoringSSL.a(gcm.c.o)
  "_CCryptoBoringSSL_sha1_block_data_order", referenced from:
      _CCryptoBoringSSL_SHA1_Update in libCCryptoBoringSSL.a(sha1.c.o)
      _CCryptoBoringSSL_SHA1_Final in libCCryptoBoringSSL.a(sha1.c.o)
      _CCryptoBoringSSL_SHA1_Transform in libCCryptoBoringSSL.a(sha1.c.o)
  "_CCryptoBoringSSL_sha256_block_data_order", referenced from:
      _CCryptoBoringSSL_SHA256_Update in libCCryptoBoringSSL.a(sha256.c.o)
      _CCryptoBoringSSL_SHA256_Final in libCCryptoBoringSSL.a(sha256.c.o)
      _CCryptoBoringSSL_SHA256_Transform in libCCryptoBoringSSL.a(sha256.c.o)
      _CCryptoBoringSSL_SHA256_TransformBlocks in libCCryptoBoringSSL.a(sha256.c.o)
  "_CCryptoBoringSSL_sha512_block_data_order", referenced from:
      _CCryptoBoringSSL_SHA512_Update in libCCryptoBoringSSL.a(sha512.c.o)
      _CCryptoBoringSSL_SHA512_Final in libCCryptoBoringSSL.a(sha512.c.o)
      _CCryptoBoringSSL_SHA512_Transform in libCCryptoBoringSSL.a(sha512.c.o)
  "_CCryptoBoringSSL_vpaes_cbc_encrypt", referenced from:
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_vpaes_ctr32_encrypt_blocks", referenced from:
      _CCryptoBoringSSL_aes_ctr_set_key in libCCryptoBoringSSL.a(e_aes.c.o)
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_vpaes_decrypt", referenced from:
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_vpaes_encrypt", referenced from:
      _CCryptoBoringSSL_aes_ctr_set_key in libCCryptoBoringSSL.a(e_aes.c.o)
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_vpaes_set_decrypt_key", referenced from:
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
  "_CCryptoBoringSSL_vpaes_set_encrypt_key", referenced from:
      _CCryptoBoringSSL_aes_ctr_set_key in libCCryptoBoringSSL.a(e_aes.c.o)
      _aes_init_key in libCCryptoBoringSSL.a(e_aes.c.o)
ld: symbol(s) not found for architecture arm64

If possible, minimal yet complete reproducer code (or URL to code)

[anything to help us reproducing the issue]

Swift Crypto version/commit hash

296d330

Environment

Stand in the root of the repo and run ./scripts/environment.sh and paste the output below

Swift version: Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)
Target: arm64-apple-darwin20.3.0
Unix version: Darwin Maxs-Mac.local 20.3.0 Darwin Kernel Version 20.3.0: Thu Jan 21 00:07:10 PST 2021
 root:xnu-7195.81.3~1/RELEASE_ARM64_T8020 arm64

macOS version: 11.2.2
Xcode-select path: '/Applications/Xcode-12.4.0.app/Contents/Developer
Xcode: Xcode 12.4 (Build version 12D4e)

Swift Crypto to validate iOS app receipts

I would like to know if is possible to use swift-crypto to validate iOS app receipts without the need to use other non-native libraries like OpenSSL. If this is possible, I would appreciate if someone can point me to the appropriate documentation on how to do this.

New API Proposal: RSA Key Support

New API Proposal: RSA Key Support

Motivation:

RSA is a widely used and popular public key system used for key exchange and popular with JWTs and older TLS versions among other uses. Although relatively old and slow, it is still widely supported and heavily used, justifying its inclusion in Swift Crypto. BoringSSL has the code in it required, so those APIs would need to be exposed.

Importance:

A lot of systems still use RSA to public key encryption and validation. Apple's own Sign in With Apple service provides a JWT that is signed using an RSA key, provided as a JWK. Without RSA support in Swift Crypto, we are unable to use that library to verify JWTs from Apple on the server-side.

Privacy manifest support

Hello,

According to Upcoming third-party SDK requirements, starting this spring, iOS apps using BoringSSL or OpenSSL need to have a Privacy manifest file when submitted to the App Store.

It seems like there's some related C code in swift-crypto (CCryptoBoringSSL). I'm not entirely sure if this calls for a Privacy manifest, but I'm curious if there are any plans to include such a file.

New API Proposal: Add `SHA1` hash function

New API Proposal: Add SHA1 hash function

Motivation:

It is common to use SHA1 hashes to uniquely identify a collection of files (or data) for a quick lookup reference.

Redis uses this for caching Lua scripts that have been executed to improve JIT performance and for faster execution (if supported by the Redis client).

In SwiftNIO, a comment was written describing a future where the Swift Standard Library or Foundation would provide the SHA1 hash, so they wouldn't maintain their own for Web Sockets.

Importance:

In RediStack we will be using a SHA1 implementation to provide client-side optimistic caching of Redis Lua scripts, as many other clients do.

As we cannot rely on SwiftNIO's implementation, as it is internal, and their OpenSSL C wrapper API is not considered stable, we've pulled in CryptoSwift's implementation.

Given the regular use case for SHA1 hashing, having Crypto provide a "common currency" type just like the SHA256, 384, and 512.

QUIC Crypto Primitives Support

New API Proposal: QUIC Crypto Primitives Support

Request:

  • Add support for AES-ECB under the Insecure umbrella struct
  • Add support for setting the 4 byte Counter alongside the Nonce/IV when initializing a ChaCha20 Cipher.

Importance:

Adds the missing cryptographic functions required to support the QUIC protocol as defined in RFC 9001

New API Proposal: Add (expose) ECC methods

NEW API Proposal: Add (expose) ECC methods

Motiviation

We should expose some Elliptic Curve Cryptography (ECC) methods, at least:

  1. Point multiplication
  2. Decode point on curve from a compressed public key.

So that developers can develop cryptographic constructs using these fundamental building blocks. e.g. ECIES (here is my implementation)

An (EC) crypto lib which does not expose at least these above-mentioned methods is extremely limiting.

Alternate solution

Alternatively, we can include common cryptographic constructs such as above mentioned ECIES in this library - but it is more limiting and sounds like lots of work - and more maintenance....

Importance

If above mentioned cryptographic primitives - especially EC point multiplication - are not expose then crypto companies and cryptocurrency project might have to turn to other solutions. Which would be sad really, since this repo could improve the whole crypto sphere (on the Swift side of things).

Handling Non Standard Keys Test Failed

The following 6 "awkward RSA Keys" tests failed (XCTAssertEqual failed: threw error "incorrectParameterSize") when built with Swift 5.9 - Apple Swift version 5.9 (swiftlang-5.9.0.114.10 clang-1500.0.29.1)

XCTAssertEqual(try _RSA.Signing.PrivateKey(pemRepresentation: awkwardRSAPrivateKeyPEM).keySizeInBits, 2056)
XCTAssertEqual(try _RSA.Signing.PrivateKey(pemRepresentation: awkwardRSAPrivateKeyPKCS8PEM).keySizeInBits, 2056)
XCTAssertEqual(try _RSA.Signing.PrivateKey(derRepresentation: awkwardRSAPrivateKeyDER).keySizeInBits, 2056)
XCTAssertEqual(try _RSA.Signing.PrivateKey(derRepresentation: awkwardRSAPrivateKeyPKCS8DER).keySizeInBits, 2056)
XCTAssertEqual(try _RSA.Signing.PublicKey(pemRepresentation: awkwardRSAPublicKeyPEM).keySizeInBits, 2056)
XCTAssertEqual(try _RSA.Signing.PublicKey(derRepresentation: awkwardRSAPublicKeyDER).keySizeInBits, 2056)

CryptoKitError.authenticationFailure when decrypting an AES SealedBox

Question Checklist

Question Description

I'm trying to decrypt existing data encrypted using AES GCM. I initialise a SealedBox with the encrypted data, but when I pass that to AES.GCM.open I get a .CryptoKitError.authenticationFailure

Below is some sample code below that reproduces the issue:

let secret = "my-256-bit-secret-my-secret-my-s"
let key = SymmetricKey(data: secret.data(using: .utf8)!)

let plain = "Say hello to my little friend!"
let nonce = try! AES.GCM.Nonce(data: Data(base64Encoded: "fv1nixTVoYpSvpdA")!)
let tag = Data(base64Encoded: "e1eIgoB4+lA/j3KDHhY4BQ==")!

// Encrypt
let sealedBox = try! AES.GCM.seal(plain.data(using: .utf8)!, using: key, nonce: nonce, authenticating: tag)

let ciphertext = sealedBox.ciphertext.base64EncodedString()
print("ciphertext: \(ciphertext)") // bWtTZkPAu7oXpQ3QpHvoTvc4NQgDTIycXHFJWvjk


let sealedBoxToDecrypt = try! AES.GCM.SealedBox(nonce: nonce,
                                                ciphertext: Data(base64Encoded: ciphertext)!,
                                                tag: tag)
let decrypted = try! AES.GCM.open(sealedBoxToDecrypt, using: key) // Thread 1: Fatal error: 'try!' expression unexpectedly raised an error: CryptoKit.CryptoKitError.authenticationFailure

Support For Cocoapods

Motivation:

Even though Swift Package Manager is gaining traction. Cocoapods will still be around for a while and it's widely used in the iOS and MacOS ecosystem.

Importance:

This allows existing applications to use this library instead of falling back to older, less updated and maintained libraries.

Add sendable conformance to appropriate types

Add Sendable conformance to appropriate types would allow to enabled additional safety checks at compile time. Without it, developers have to guess whether a type is Sendable or not.

Using this on Apple platforms before macOS 10.15 / iOS 13?

As far as I can tell, Swift Crypto requires macOS 10.15 / iOS 13 on Apple platforms, presumably due to the dependency on CryptoKit.

Would it be possible to use Swift Crypto on older Apple platforms by falling back to its BoringSSL backend in that case?

Crypto operations on streamed data

New API Proposal: Crypto operations on streamed data

Motivation:

Add APIs to handle crypto operations on streamed data, meaning by processing chunks of data of arbitrary size in a non-continuous way.
These APIs should offer three phases:

  • context initialization
  • update(s): update through a method that takes as input a chunk of data (can be called multiple times)
  • finalization: Get the output of the crypto operation

Cipher, Digest, and HMac operations would benefit from such API. Although it may not be possible to add this kind of streamed operation on all the algorithms.

Such APIs exist in Common Crypto on the Apple Platforms through for instance CCCryptorCreate, CCCryptorUpdate, and CCCryptorFinal.

Importance:

When performing a crypto operation on a large file, it must be done by streaming the data instead of keeping it all in memory/loading all in memory.

Noncopyable / moveonly `PrivateKey` API?

New API Proposal: Noncopyable PrivateKey

Motivation:

For the past six years I've been working with cryptography and Swift and I've been missing some kind of compiler help regarding my usage of private keys. Rust's powerful ownership model is most likely a strong reason why many crypto project chose Rust as a go to language. With Swift 5.9 we have noncopyable types, along consume/borrow which seem like a nice fit for swift-crypto!

What is Apple's thoughts on including a new API layer to each curve that ships with swift-crypto where the private keys are ~Copyable? I imagine it would be a new namespace, similar to how P256 and SecureEnclave.P256 namespaces exists in parallell. It could be Safe.P26.Signing.PrivateKey, the corresponding PublicKey need not be ~Copyable. An alternative would be to put the non copyable variant in P256.Signing.Safe.PrivateKey or let the type itself be prefix with "Safe", i.e. P256.Signing.SafePrivateKey.

Importance:

Does this API unlock entirely new use-case

YES, it unlocks an entire new use-case for the developer writing the code! Just how async/await offers an entire new way and safer way to write concurrency code in Swift, ~Copyable offers the users of swift-crypto - and CryptoKit - an entire new and safer way of using private keys!

could not build Objective-C module 'Crypto'

Question Checklist

Question Subject

I'm having a hard time trying to use the library in a new multiplatform Swift library that I'm trying to create.

The project doesn't build.

Question Description

Whenever I try to build the project I get the following errors:

warning: dependency 'swift-crypto' is not used by any target
<path>/.build/x86_64-apple-macosx/debug/Crypto.build/module.modulemap:2:12: error: header '<path>/.build/x86_64-apple-macosx/debug/Crypto.build/Crypto-Swift.h' not found
    header "<path>/.build/x86_64-apple-macosx/debug/Crypto.build/Crypto-Swift.h"
           ^
<path>/<file>.swift:2:8: error: could not build Objective-C module 'Crypto'
import Crypto
       ^
<path>/.build/x86_64-apple-macosx/debug/Crypto.build/module.modulemap:2:12: error: header '<path>/.build/x86_64-apple-macosx/debug/Crypto.build/Crypto-Swift.h' not found
    header "<path>/.build/x86_64-apple-macosx/debug/Crypto.build/Crypto-Swift.h"
           ^
<path>/<file>.swift:2:8: error: could not build Objective-C module 'Crypto'
import Crypto
Apple Swift version 5.2.4 (swiftlang-1103.0.32.9 clang-1103.0.32.53)
Target: x86_64-apple-darwin19.5.0

I already try using different versions of the library including the 1.1.0-rc.1 and master but I'm getting the same issue.

In some related questions, I can't find information about how to use it with binary data without importing Foundation to access de Data class.

Is it possible to work with binary data in a multiplatform library using swift-crypto (without Foundation)?

New API Proposal: Add SECG curves, especially `secp256k1`

New API Proposal: Add secp256k1curve

Motivation:

I REALLY think we should add EC Curve secp256k1.

I can make a PR - if I know Apple will not reject it automatically just because it is a SECG curve and not a NIST curve?(or due it being "the Bitcoin curve")

If we were to allow SECG curves (the whole crypto community would love it if we did), then it would make sense to renamed the existing curve using NIST naming to use SECG naming instead, see Appendix A in RFC4492

Why add support for secp256k1? Well, Crypto currencies are on the rise (despise crypto winter of 2018/2019), and App Store contains lots of wallets already - a vast share of which are crypto currencies using the secp256k1 (since most coins are ERC20 tokens based on Ethereum, and all coins in top 8 use sec256k1, I approximate 95% of the total market cap of cryptocurrencies rely on secp256k1).

Since there are no native Swift lib for secp256k1, we see lots of unsafe libs, such as my own EllipticCurveKit, hyugit/EllipticCurve, EllipticSwift, all of which, including mine are unsafe.

One of the most popular projects is a wrapper of C library secp256k1, named BitcoinKit, but it does many things, including HD Wallet and is a bit messy.

So in order to protect users of iOS crypto wallets from losing funds due to errors/unsafe code, I think it is important that we add this curve.

Importance:

No we cannot use this curve today, but it is easy to add it I can make a PR.. I've dabbled in Crypto a bit before EllipticCurveKit, PRs into BitcoinKit.

PEM/DER Support for Curve25519

New API Proposal: Curve25519

Motivation:

I know CryptoKit provides Curve25519, but to export the public key as a pem string is not possible, as the raw representation of the key is compressed 32 bytes. For pem, we require uncompressed bytes along with ASN1 encoding and other stuff right?

Importance:

Saw in the source code the files like SubjectPublicKeyInfo.swift. This helps wrap the raw bytes and export them as pem. My current requirement is to export the curve25519 public key as a pem string. No libraries out there does this currently.

New API Proposal: Support for PEM/DER keys

New API Proposal: Support for PEM/DER keys

Motivation:

Many keys are distributed from issuers in PEM or DER format, e.g.:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0cOtPjzABybjzm3fCg1aCYwnx
PmjXpbCkecAWLj/CcDWEcuTZkYDiSG0zgglbbbhcV0vJQDWSv60tnlA3cjSYutAv
7FPo5Cq8FkvrdDzeacwRSxYuIq1LtYnd6I30qNaNthntjvbqyMmBulJ1mzLI+Xg/
aX4rbSL49Z3dAQn8vQIDAQAB
-----END PUBLIC KEY-----

Currently, there is no support in Swift Crypto to allow easy ingestion of keys in this form. Adding support for this would dramatically lower the barrier of entry to users trying to use PEM keys with Swift Crypto.

Importance:

In order to use any kind of PEM/DER keys at the moment in Swift Crypto, you need to manually implement some ASN.1 code to keys the certificate and convert it to a form that Swift Crypto understands (x963 etc). Swift Crypto even does this for public keys in it's test suite. The code there allows public keys to be converted, however private keys require significantly more work.

Password based KDF

New API Proposal: Password based KDF

Motivation:

Currently no password based KDF is available. This is required for tasks like generating a AES key from a password.

Importance:

Without it, generating crypto keys from a password is not possible.

encrypte \n

Question Description

let message = "123123abcd"
let sign = HMAC<Insecure.SHA1>.authenticationCode(for: Array(message.utf8), using: SymmetricKey(data: Array("123".utf8)))
print(sign)
//result: 4953a32b076ae82c10f98a1758da07fab47fb031
// Online encryption, the same as: 4953a32b076ae82c10f98a1758da07fab47fb031

but when I add a \n at the end, the result is different

let message = "123123abcd\n"
let sign = HMAC<Insecure.SHA1>.authenticationCode(for: Array(message.utf8), using: SymmetricKey(data: Array("123".utf8)))
print(sign)
//result: f2c9f7b4ec5f89fb0a137934ae6a916eaf95327e
//Online encryption result: 1ed9bcfbb59fd81a8611b042a285eaf9e0e4670f

Point validation

Question Checklist

Question Subject

In the swift-paseto package we were discussing the initialization of P384.Signing.Publickey. While this is SwiftCrypto and not CryptoKit, I was hoping you could answer our question anyhow. I have no clue where to direct our question otherwise, and so I hope you do not mind me opening this question here.

couldn't find (and am still having trouble finding) documentation about whether or not Apple's CryptoKit does point validation when constructing the PublicKey type.

Question Description

So the question comes down to: do you know if the following line does any point validation? I think this is a valid question for this library and for CryptoKit.

let publicKey = P384.Signing.Publickey.init(pemRepresentation: publicKeyPem)

should have Swift 5.3 CI

Currently, only Swift 5.1 & 5.2 are tested but there are already Swift 5.3 nightlies, would be good to test them.

No way to get PKCS#8 representation of private RSA key

New Issue Checklist

Expected behavior

_CryptoExtras.RSA.Encryption.PublicKey and .PrivateKey have the following:

struct PublicKey {
  // The PKCS#8 PEM representation of the public key
  var pemRepresenation: String {}

  // The PKCS#1 PEM representation of the public key
  var pkcs1PEMRepresentation: String {}
}

extension PrivateKey {
  // The PKCS#1 PEM representation of the private key
  var pemRepresentation: String {}
}

I expected that publicKey.pemRepresentation and privateKey.pemRepresenatation would use the same standard (PKCS#8), especially since the public key specifically calls out when it's using PKCS#1. However, in practice, the similarly-named methods produce separate results, and there's no provided way to get the PKCS#8 representation of a private key.

The inconsistency in formatting between publicKey.pemRepresentation and privateKey.pemRepresentation is unfortunate. Unfortunately, for stability reasons we probably cannot change the return types of either of these. But it would be nice to have a way to get a consistent representation. Perhaps .pkcs8PEMRepresentation could be added to both, so that users can be explicit about which they want?

If possible, minimal yet complete reproducer code (or URL to code)

import _CryptoExtras

let key = try! _RSA.Encryption.PrivateKey(keySize: .bits2048)
let privatePEM = key.pemRepresenatation
let publicPEM = key.publicKey.pemRepresentation

// succeeds
assert(publicPEM.hasPrefix("-----BEGIN PUBLIC KEY-----"))

// fails
assert(privatePEM.hasPrefix("-----BEGIN PRIVATE KEY-----"))

Swift Crypto version/commit hash

3.0.0

A build warning is viewed on Linux in Swift 5.3.

New Issue Checklist

Expected behavior

No warnings are viewed while building.

Actual behavior

A warning like below is viewed.

/code/Sources/Crypto/Util/SecureBytes.swift:265:13: warning: using '_' to ignore the result of a Void-returning function is redundant
            _ = self.withUnsafeMutablePointerToElements { elementsPtr in
            ^~~~

Steps to reproduce

Exec swift build on Linux in Swift 5.3.

Swift Crypto version/commit hash

Ver. 1.1.1

Reason

memset_s returns errno_t on Darwin.
On the other hand, memset_s that is implemented in this library returns Void.

Environment

Swift version 5.3 (swift-5.3-RELEASE)
Target: x86_64-unknown-linux-gnu

OS: Ubuntu 18.04
Linux df91427aa21c 4.19.76-linuxkit #1 SMP Tue May 26 11:42:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Add Sendable annotation to Crypto Extras

New API Proposal: Sendable Support

Motivation:

Use Swift Crypto types in concurrency contexts invariably starts to hit issues as no types are Sendable. I'm aware there are issues around the main Crypto target as that has match CryptoKit (or does it? Could we add Sendable conformance on Linux?) but it would be great to add it to the types in Crypto Extras

Importance:

It's possible to achieve this with a mix of @preconcurrency and @unchecked Sendable but neither of these are ideal for obvious reasons.

Possible Over-Iteration in PrettyBytes

I was looking for a not %02x way of converting binary to hex String, and I stumbled upon the implementation in PrettyBytes.swift.

self.regions.forEach { (_) in
for i in self {
hexChars[Int(offset * 2)] = itoh((i >> 4) & 0xF)
hexChars[Int(offset * 2 + 1)] = itoh(i & 0xF)
offset += 1
}
}

I'm not 100% sure about the Sequence conformance of non-contiguous DataProtocol, but it seemed to me that the self on line 46 should be the ignored parameter $0 (or maybe eliminate the region logic since looping over self most likely would have taken non-contiguous memory regions into account?), otherwise the code reads:

For each segment of the data buffer, loop over the entirety of data buffer and convert each byte to two hex chars.

Unless non-contiguous DataProtocol has non-stable indices and iterators, this code will over/re-iterate the data buffer.

API Change Proposal: Add details in errors

New API Proposal: Add details in errors

Motivation:

One of the many strengths of Swift is to be able to pass values to enum cases, often used to model Errors.

public enum CryptoKitError: Error {
    case incorrectKeySize
    case incorrectParameterSize
    case authenticationFailure
    case underlyingCoreCryptoError(error: Int32)
}

When I see a error of type CryptoKitError, e.g. case incorrectKeySize I don't get any info about which key size was expected and which was used.

I propose that we add some details, e.g. like so:

public enum CryptoKitError: Error {
    case incorrectKeySize(expectedSize: UInt32, butGot: UInt32)
    case incorrectParameterSize(expectedSize: UInt32, butGot: UInt32)
    case authenticationFailure
    case underlyingCoreCryptoError(error: Int32)
}

This will of course require change of CryptoKit.CryptoKitError, making this change non-trivial.

Importance:

It's a really small addition, but greatly benefits users. Depending on the formatting of localizedDescription/description/debugDescription we can display a much more rich message, giving clear context to the user:

"Error: incorrect size of key, expected key size of 256 bits, but you passed a key of length 521 bits"

(Or what similar) makes it much more clear what went wrong and how I ought to debug the error.

[Github] Add topics to make repo more easy to find

Issue template is not applicable, this relates to Github.

We should add topics to the repo to make it more easy to find, e.g:

  • cryptography
  • crypto
  • elliptic-curves
  • ECDSA
  • EdDSA
  • ECDH
  • Diffie-Hellman
  • hash-functions

Possibly also some of the hash functions by name?

  • sha256
  • sha384

Possible also some of the curves?

  • Curve25519
  • P256
  • P521
  • secp256r1 (<-- SECG naming of P-256)
  • prime256v1 (<-- ANSI X9.62 naming of P-256)

AES-CBC Support

New API Proposal: AES-CBC

Motivation:

AES-GCM may be recommended for new applications, but AES-CBC is likely the most common (and vulnerability-free to-date) symmetric encryption in use. HLS streaming and many third-party file formats and proprietary protocols build on AES-CBC, so not having it in Crypto (and CryptoKit) hinders interoperability with many services.

BoringSSL does AES-CBC. And since we already have a GCM wrapper, adding CBC should be as easy as changing a few parameters. We won't be able to reuse AEAD contexts and protocols to share this implementation with GCM/ChaCha because CBC is not AEAD, but calls to BoringSSL EVP should only require minimal changes.

Importance:

Currently there is no official Swift APIs for AES-CBC. On Apple platforms, one has access to CommonCrypto which does full-feature AES, and Security framework which has limited AES support only on macOS. Third-party Swift cryptography libraries with AES support do exist, but their APIs do not play well if most parts of my application already uses Crypto(Kit).

Add SecureEnclave stub

New API Proposal: SecureEnclave

Motivation:

Swift packages that use CryptoKit's SecureEnclave module (if it is available) cannot compile against Crypto, since Crypto does not define this module. All SecureEnclave operations have to be conditionally compiled in this case.

Since SecureEnclave has runtime detection (SecureEnclave.isAvailable), a stub of the SecureEnclave API that returns false for isAvailable (and throws for all operations) on non-macOS platforms would remove the need for conditional compilation.

One annoyance is that some functions in this API also take LAContext and SecAccessControl parameters. These can be left out, or the structures would have to be stubbed out too.

Importance:

Better compatibility with CryptoKit.

Linux armv7 support

On linux/armv7 some symbols are not properly prefixed. Building a project that includes both swift-nio-ssl and swift-crypto, results in the following conflicts:

ld.lld: error: duplicate symbol: CRYPTO_poly1305_init_neon
ld.lld: error: duplicate symbol: CRYPTO_poly1305_update_neon
ld.lld: error: duplicate symbol: CRYPTO_poly1305_finish_neon
ld.lld: error: duplicate symbol: openssl_poly1305_neon2_blocks
ld.lld: error: duplicate symbol: openssl_poly1305_neon2_addmulmod
ld.lld: error: duplicate symbol: vpaes_encrypt_key_to_bsaes
ld.lld: error: duplicate symbol: vpaes_decrypt_key_to_bsaes
ld.lld: error: duplicate symbol: sha512_block_data_order_neon
ld.lld: error: duplicate symbol: sha256_block_data_order_neon
ld.lld: error: duplicate symbol: bsaes_cbc_encrypt
ld.lld: error: duplicate symbol: bsaes_ctr32_encrypt_blocks
ld.lld: error: duplicate symbol: x25519_NEON
ld.lld: error: duplicate symbol: CRYPTO_has_broken_NEON
ld.lld: error: duplicate symbol: CRYPTO_needs_hwcap2_workaround

It looks like CCryptoBoringSSL_boringssl_prefix_symbols.h is generated by vendor-boringssl.sh by building BoringSSL for various architectures and gathering all symbols. There is no official linux/armv7 docker image yet, so at the moment we can't use the same method for adding these symbols, but would it be possible to create a temporary solution, for example by hardcoding these symbols? Or is there any proper solution that could work without requiring an official linux/armv7 docker?

SPM CryptoSwift

New Issue Checklist

Expected behavior

Use SwiftOTP via SPM without errors.

Actual behavior

Error while compiling the project:

The package product 'CryptoSwift' requires minimum platform version 9.0 for the iOS platform, but this target supports 8.0 (in target 'SwiftOTP' from project 'SwiftOTP')

Steps to reproduce

  1. Create the empty Xcode project.
  2. Add SwiftOTP package dependency.
  3. Compile the project.
  4. Get compile error.

How to re-access `SecureEnclave.P256.Signing.PrivateKey` that was created earlier? Proposal for missing init!

This question should probably go on Apple Developer Forum, however, I think users of this lib might find it useful and I also have an improvment proposal for CryptoKit, which might affect swift-crypto?

If I create a new SecureEnclave.P256.Signing.PrivateKey using this initializer (e.g. using default SecAccessControl afterFirstUnlockThisDeviceOnly) -- let's call this newly created private key Key0 -- it is my understanding that (assuming the iPhone supports it) Key0 lives in the secure memory of the Secure Enclave. And any sign operations is performed in the Secure Enclave, meaning that this is a true hardware wallet, i.e. the private key Key0 never ever leaves the memory of the secure enclave, is that correct?

That raises the question, how do I re-access Key0 upon restart of the app? It looks like I need to use the initializer dataRepresentation: Data (and possibly with the optional LAContext), but then I need to pass in the Private Key as data! Which requires the user to have exported the private key, which means that the private key has left the secure enclave!!! I.e. we are forced to store the private key in keychain, which items are encrypted with an encryption key that lives in the secure enclave if I have understood it correctly?

So I guess the ""only"" (still a big one) win of SecureEnclave.P256.Signing.PrivateKey vs non-secure enclave variant P256.Signing.PrivateKey is that once initialized, it lives inside the memory of the secure enclave, but we still need to go through unsafe realm of memory outside of secure enclave to get there, for the path of re-accessing an earlier created key, e.g. Key0??

If my understanding is correct, then here comes a question and a possible improvement proposal!

Isn't Key0 persisted (between iPhone/device restarts)? Because Secure Enclave holds my credit cards (if any) for Apple Pay etc, right? So it must support persistence! So it feels like we are missing an initializer for SecureEnclave.P256.Signing.PrivateKey! The one where we want to get a handle to it by matching it against its public key! So the flow and code are:

  1. User uses App "CoolCryptoApp" for the first time, the app creates a brand new SecureEnclave.P256.Signing.PrivateKey, let us once again call itKey0, the app CoolCryptApp persists the publicKey of the private key, and it saves this public key in keychain (or possibly UserDefaults, since it is a public key)
  2. When user restarts her phone and re-opens CoolCryptoApp, the app re-access Key0 by use of a new static func (or iniitalizer) SecureEnclave.P256.Signing.PrivateKey.restore(matching: P256.Signing.PublicKey) -> SecureEnclave.P256.Signing.PrivateKey? which either is returning an Optional (or failing init) or throws.

That way we can re-access Key0 without the private key ever leaving the secure enclave!

Am I missing something?

Cheers!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.