1 #region Copyright notice and license
2 // Copyright 2015 gRPC authors.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 #endregion
16 using System;
17 using System.Runtime.InteropServices;
18 using System.Threading;
19 using System.Threading.Tasks;
20 using Grpc.Core.Utils;
21 
22 namespace Grpc.Core.Internal
23 {
24     /// <summary>
25     /// grpc_server_credentials from <c>grpc/grpc_security.h</c>
26     /// </summary>
27     internal class ServerCredentialsSafeHandle : SafeHandleZeroIsInvalid
28     {
29         static readonly NativeMethods Native = NativeMethods.Get();
30 
ServerCredentialsSafeHandle()31         private ServerCredentialsSafeHandle()
32         {
33         }
34 
CreateSslCredentials(string pemRootCerts, string[] keyCertPairCertChainArray, string[] keyCertPairPrivateKeyArray, bool forceClientAuth)35         public static ServerCredentialsSafeHandle CreateSslCredentials(string pemRootCerts, string[] keyCertPairCertChainArray, string[] keyCertPairPrivateKeyArray, bool forceClientAuth)
36         {
37             GrpcPreconditions.CheckArgument(keyCertPairCertChainArray.Length == keyCertPairPrivateKeyArray.Length);
38             return Native.grpcsharp_ssl_server_credentials_create(pemRootCerts,
39                                                                   keyCertPairCertChainArray, keyCertPairPrivateKeyArray,
40                                                                   new UIntPtr((ulong)keyCertPairCertChainArray.Length),
41                                                                   forceClientAuth ? 1 : 0);
42         }
43 
ReleaseHandle()44         protected override bool ReleaseHandle()
45         {
46             Native.grpcsharp_server_credentials_release(handle);
47             return true;
48         }
49     }
50 }
51