5
// Sebastien Pouliot <sebastien@xamarin.com>
7
// Copyright 2011 Xamarin Inc.
9
// Permission is hereby granted, free of charge, to any person obtaining
10
// a copy of this software and associated documentation files (the
11
// "Software"), to deal in the Software without restriction, including
12
// without limitation the rights to use, copy, modify, merge, publish,
13
// distribute, sublicense, and/or sell copies of the Software, and to
14
// permit persons to whom the Software is furnished to do so, subject to
15
// the following conditions:
17
// The above copyright notice and this permission notice shall be
18
// included in all copies or substantial portions of the Software.
20
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30
using System.Runtime.InteropServices;
31
using MonoMac.ObjCRuntime;
32
using MonoMac.CoreFoundation;
33
using MonoMac.Foundation;
35
namespace MonoMac.Security {
37
public class SecImportExport {
39
static NSString passphrase;
40
static NSString label;
41
static NSString keyid;
42
static NSString trust;
43
static NSString chain;
44
static NSString identity;
46
static public NSString Passphrase {
48
if (passphrase == null)
49
passphrase = new NSString ("passphrase");
54
static public NSString Label {
57
label = new NSString ("label");
62
static public NSString KeyId {
65
keyid = new NSString ("keyid");
70
static public NSString Trust {
73
trust = new NSString ("trust");
78
static public NSString CertChain {
81
chain = new NSString ("chain");
86
static public NSString Identity {
89
identity = new NSString ("identity");
94
[DllImport (Constants.SecurityLibrary, EntryPoint="SecPKCS12Import")]
95
extern static SecStatusCode SecPKCS12Import (IntPtr pkcs12_data, IntPtr options, out IntPtr items);
97
static public SecStatusCode ImportPkcs12 (byte[] buffer, NSDictionary options, out NSDictionary[] array)
99
using (NSData data = NSData.FromArray (buffer)) {
100
return ImportPkcs12 (data, options, out array);
104
static NSDictionary GetRetainedDictionary (IntPtr handle)
106
NSDictionary dict = (NSDictionary) Runtime.GetNSObject (handle);
111
static public SecStatusCode ImportPkcs12 (NSData data, NSDictionary options, out NSDictionary[] array)
114
throw new ArgumentNullException ("options");
117
SecStatusCode code = SecPKCS12Import (data.Handle, options.Handle, out handle);
118
// note: NSArray.ArrayFromHandle will retain the NSDictionary it creates - but the ones
119
// we're receiving already are retained, GetRetainedDictionary drops that extra level
120
array = NSArray.ArrayFromHandle <NSDictionary> (handle, GetRetainedDictionary);
b'\\ No newline at end of file'