cec450339d3f916f1283538831f57b0209eacde6
[platform/core/csapi/tizenfx.git] / Tizen.Applications / Tizen.Applications / PackageCertificate.cs
1 // Copyright 2016 by Samsung Electronics, Inc.,
2 //
3 // This software is the confidential and proprietary information
4 // of Samsung Electronics, Inc. ("Confidential Information"). You
5 // shall not disclose such Confidential Information and shall use
6 // it only in accordance with the terms of the license agreement
7 // you entered into with Samsung.
8
9 using System;
10 using System.Collections.Generic;
11 using System.Runtime.InteropServices;
12
13 namespace Tizen.Applications
14 {
15     /// <summary>
16     /// This class provides information about package certification.
17     /// </summary>
18     public class PackageCertificate
19     {
20         private const string LogTag = "Tizen.Applications";
21
22         private readonly string _root;
23         private readonly string _intermediate;
24         private readonly string _signer;
25
26         internal PackageCertificate(string root, string intermediate, string signer)
27         {
28             _root = root;
29             _intermediate = intermediate;
30             _signer = signer;
31         }
32
33         /// <summary>
34         /// Root certificate
35         /// </summary>
36         public string Root { get { return _root;  } }
37
38         /// <summary>
39         /// Intermediate certificate
40         /// </summary>
41         public string Intermediate { get { return _intermediate; } }
42
43         /// <summary>
44         /// Signer certificate
45         /// </summary>
46         public string Signer { get { return _signer; } }
47
48         internal static IReadOnlyDictionary<CertificateType, PackageCertificate> GetPackageCertificates(IntPtr packageInfoHandle)
49         {
50             Dictionary<Interop.Package.CertificateType, string> nativeCertificates = new Dictionary<Interop.Package.CertificateType, string>();
51             Interop.Package.PackageInfoCertificateInfoCallback certificateInfoCb = (handle, certType, certValue, userData) =>
52             {
53                 if (certValue == null) certValue = string.Empty;
54                 nativeCertificates.Add(certType, certValue);
55                 return true;
56             };
57
58             Interop.PackageManager.ErrorCode err = Interop.Package.PackageInfoForeachCertificateInfo(packageInfoHandle, certificateInfoCb, IntPtr.Zero);
59             if (err != Interop.PackageManager.ErrorCode.None)
60             {
61                 Log.Warn(LogTag, string.Format("Failed to get certificate info. err = {0}", err));
62             }
63
64             Dictionary<CertificateType, PackageCertificate> certificates = new Dictionary<CertificateType, PackageCertificate>();
65             string authorRootCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.AuthorRootCertificate);
66             string authorIntermediateCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.AuthorIntermediateCertificate);
67             string aurthorSignerCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.AuthorSignerCertificate);
68             certificates.Add(CertificateType.Author, new PackageCertificate(authorRootCertificate, authorIntermediateCertificate, aurthorSignerCertificate));
69
70             string distRootCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.DistributorRootCertificate);
71             string distIntermediateCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.DistributorIntermediateCertificate);
72             string distSignerCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.DistributorSignerCertificate);
73             certificates.Add(CertificateType.Distributor, new PackageCertificate(distRootCertificate, distIntermediateCertificate, distSignerCertificate));
74
75             string dist2RootCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2RootCertificate);
76             string dist2IntermediateCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2RootCertificate);
77             string dist2SignerCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2RootCertificate);
78             certificates.Add(CertificateType.Distributor2, new PackageCertificate(dist2RootCertificate, dist2IntermediateCertificate, dist2SignerCertificate));
79
80             return certificates;
81         }
82
83         private static string GetValue(IDictionary<Interop.Package.CertificateType, string> dict, Interop.Package.CertificateType key)
84         {
85             string value = string.Empty;
86             dict.TryGetValue(key, out value);
87             return value;
88         }
89     }
90 }