简体   繁体   中英

Xamarin.iOS binding library cannot use the SecKey API from the Security framework

I created a binding library from an objective-c framework. It works but it cannot use SecKey's encryption api in the Security framework. Library used it for the api request. Is Security framework not fully supported in Xamarin.iOS? Or is it not working when binding library used it?

Note: By the way I added this line to native framework for dependency:

 <Frameworks>Foundation CFNetwork CoreFoundation Security</Frameworks>

Update 1:

This is the device log:

Trust evaluate failure: [leaf AnchorTrusted]
DemoX[10647]/1#-1 LF=22 add Error Domain=NSOSStatusErrorDomain Code=-34018 "Client has neither application-identifier nor keychain-access-groups entitlements" UserInfo={NSDescription=Client has neither application-identifier nor keychain-access-groups entitlements}
SecTaskLoadEntitlements failed error=22 cs_flags=200, pid=10438
SecTaskCopyDebugDescription: DemoX[10039]/0#-1 LF=0
nw_protocol_boringssl_signal_connected(728) [C13.1:2][0x7fbe21309f80] TLS connected [version(0x0303) ciphersuite(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) group(0x001d) signature_alg(0x0601) alpn(http/1.1) resumed(0) offered_ticket(0) false_started(0) ocsp_received(0) sct_received(0) connect_time(1811ms) flight_time(144ms) rtt(72ms) write_stalls(0) read_stalls(5)]    
Trust evaluate failure: [leaf AnchorTrusted]
Trust evaluate failure: [leaf AnchorTrusted TemporalValidity]

Update 2:

When I run the framework with the XCode below lines appears but not in the my Xamarin.iOS app

inserted <keys,kcls=0,klbl=,atag=5253415574696C5F5075624B6579,
crtr=0,type=42,bsiz=0,esiz=0,sdat=2001-01-01 00:00:00 +0000,
edat=2001-01-01 00:00:00+0000,agrp=A7PT8PDBPQ.com.test.app,sync=0,
musr=,|otherAttr,tomb=0,rowid=9,cdat=2020-11-07 11:02:34 +0000,mdat=2020-11-07 11:02:34+0000,pdmn=ak,
sha1=24BB5BBEE125D6A051E08EA2CB72469A0C62042F,v_Data=<?>,
UUID=********-****-****-****-************,
persistref=,clip=0> from <SecDbConnection rw open>

and

deleted 
<keys,kcls=0,klbl=,atag=5253415574696C5F5075624B6579,crtr=0,type=42,
bsi=,esiz=0,sdat=2001-01-01 00:00:00 +0000,edat=2001-01-01 00:00:00
+0000,agrp=A7PT8PDBPQ.com.test.app,sync=0,musr=,
|otherAttr,tomb=0,rowid=7,cdat=2020-11-07 11:01:55 
+0000,mdat=2020-11-07 11:01:55 +0000,pdmn=ak,
sha1=F1A9A4EC0C5AC67D354C9D7602E118B8DF5EFAF5,
v_Data=<?>,accc=310C300A0C0470726F740C02616B,
UUID=********-****-****-****-************,
persistref=,clip=0> from <SecDbConnection rw open>

So I will answer my own questions since I found the solution. The reason behind the problem is SecKeyRef using KeyChain access to read and write key as stated in official documentation:

A SecKeyRef instance that represents a key that is stored in a keychain can be safely cast to a SecKeychainItemRef for manipulation as a keychain item. On the other hand, if the key is not stored in a keychain, casting the object to a SecKeychainItemRef and passing it to Keychain Services functions returns errors.

Having a provisioning profile in Xcode to use SecKeyRef is not important, but in Visual Studio Mac, it is required to use Entitlements.plist to enable keychain access. So if your binding library used the SecKey API, you need to enable KeyChain Access in Entitlements.plist and set apple developer account in project.

<key>keychain-access-groups</key>
<array>
    <string>$(AppIdentifierPrefix)com.company.yourapp</string>
</array>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM