using System.IO;
using Org.BouncyCastle.X509;
using System.Collections.Generic;
using System;
using System.Text;
using System.Linq;
namespace Aop.Api.Util
{
public class CertEnvironment
{
///
/// 支付宝根证书内容,用于验证下载的支付宝公钥证书有效性
///
public string RootCertContent { get; set; }
///
/// 支付宝根证书序列号,用于每次调动OpenAPI时发送给网关
///
public string RootCertSN { get; set; }
///
/// 商户证书序列号,用于每次调动OpenAPI时发送给网关
///
public string AppCertSN { get; set; }
///
/// 不同支付宝公钥证书序列号对应的公钥内容
///
private readonly Dictionary SN2PublicKey = new Dictionary();
private readonly Object DictionaryLock = new Object();
///
/// 初始化证书所需运行时参数
///
/// 用户传入的证书相关参数
/// 算法类型
public CertEnvironment(CertParams certParams, string signType)
{
//解析支付宝根证书序列号
this.RootCertContent = File.ReadAllText(certParams.RootCertPath);
this.RootCertSN = AntCertificationUtil.GetRootCertSN(RootCertContent, signType);
//解析应用证书序列号
X509Certificate appCert = AntCertificationUtil.ParseCert(File.ReadAllText(certParams.AppCertPath));
this.AppCertSN = AntCertificationUtil.GetCertSN(appCert);
//解析支付宝公钥证书序列号
X509Certificate alipayPublicKeyCert = AntCertificationUtil.ParseCert(File.ReadAllText(certParams.AlipayPublicCertPath));
string alipayPublicKeyCertSN = AntCertificationUtil.GetCertSN(alipayPublicKeyCert);
//解析支付宝公钥
string alipayPublicKey = AntCertificationUtil.ExtractPemPublicKeyFromCert(alipayPublicKeyCert);
//缓存支付宝公钥证书序号对应的支付宝公钥
AddNewAlipayPublicKey(alipayPublicKeyCertSN, alipayPublicKey);
}
public bool ContainsAlipayPublicKey(String sn)
{
if (sn == null)
{
return false;
}
lock (DictionaryLock)
{
return SN2PublicKey.ContainsKey(sn);
}
}
public string GetAlipayPublicKey(String sn)
{
lock (DictionaryLock)
{
return SN2PublicKey[sn];
}
}
public void AddNewAlipayPublicKey(String sn, String alipayPublicKey)
{
lock (DictionaryLock)
{
SN2PublicKey[sn] = alipayPublicKey;
}
}
}
}