forked from Hercules-NET/ZeusFiscal
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConfiguracaoCertificado.cs
199 lines (177 loc) · 7.98 KB
/
ConfiguracaoCertificado.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/********************************************************************************/
/* Projeto: Biblioteca ZeusNFe */
/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */
/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */
/* */
/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */
/* Zeusdev Tecnologia LTDA ME */
/* */
/* Você pode obter a última versão desse arquivo no GitHub */
/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */
/* */
/* */
/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */
/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */
/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */
/* qualquer versão posterior. */
/* */
/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */
/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */
/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/
/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */
/* */
/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/
/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */
/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */
/* Você também pode obter uma copia da licença em: */
/* http://www.opensource.org/licenses/lgpl-license.php */
/* */
/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */
/* http://www.zeusautomacao.com.br/ */
/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */
/********************************************************************************/
using System;
using System.ComponentModel;
using System.Security.Cryptography.X509Certificates;
namespace DFe.Utils
{
public enum TipoCertificado
{
[Description("Certificado A1")]
A1Repositorio = 0,
[Description("Certificado A1 em arquivo")]
A1Arquivo = 1,
[Description("Certificado A3")]
A3 = 2,
[Description("Certificado A1 em byte array")]
A1ByteArray = 3
}
public class ConfiguracaoCertificado
{
private string _serial;
private string _arquivo;
private string _senha;
private TipoCertificado _tipoCertificado;
private string _cacheId;
private byte[] _arrayBytesArquivo;
private X509KeyStorageFlags _keyStorageFlags;
public ConfiguracaoCertificado()
{
KeyStorageFlags = X509KeyStorageFlags.MachineKeySet;
SignatureMethodSignedXml = "http://www.w3.org/2000/09/xmldsig#rsa-sha1";
DigestMethodReference = "http://www.w3.org/2000/09/xmldsig#sha1";
}
/// <summary>
/// Tipo de certificado a ser usado
/// </summary>
public TipoCertificado TipoCertificado
{
get { return _tipoCertificado; }
set
{
Serial = null;
Arquivo = null;
Senha = null;
ArrayBytesArquivo = null;
_tipoCertificado = value;
}
}
/// <summary>
/// Nº de série do certificado digital
/// </summary>
public string Serial
{
get { return _serial; }
set
{
if (!string.IsNullOrEmpty(value) && TipoCertificado == TipoCertificado.A1Arquivo)
throw new Exception(string.Format("Para {0} o {1} não deve ser informado!", TipoCertificado.Descricao(), this.ObterPropriedadeInfo(c => c.Serial).Name));
if (value == _serial) return;
_serial = value;
if (!string.IsNullOrEmpty(value))
Arquivo = null;
}
}
/// <summary>
/// Array de bytes do certificado
/// </summary>
public byte[] ArrayBytesArquivo
{
get { return _arrayBytesArquivo; }
set
{
if (value == _arrayBytesArquivo) return;
_arrayBytesArquivo = value;
}
}
/// <summary>
/// Arquivo do certificado digital
/// </summary>
public string Arquivo
{
get { return _arquivo; }
set
{
if (!string.IsNullOrEmpty(value) && TipoCertificado != TipoCertificado.A1Arquivo)
throw new Exception(string.Format("Para {0} o {1} não deve ser informado!", TipoCertificado.Descricao(), this.ObterPropriedadeInfo(c => c.Arquivo).Name));
if (value == _arquivo) return;
_arquivo = value;
if (!string.IsNullOrEmpty(value))
Serial = null;
}
}
/// <summary>
/// Senha do certificado digital
/// <para>Informe a senha se desejar que o usuário não precise digitá-la toda vez que for iniciada uma nova instância da aplicação.
/// Não informe a senha para certificado A1, exceto se configurar para usar o arquivo .pfx usando o atributo <see cref="Arquivo"/></para>
/// </summary>
public string Senha
{
get { return _senha; }
set
{
if (!string.IsNullOrEmpty(value) && TipoCertificado == TipoCertificado.A1Repositorio)
throw new Exception(string.Format("Para {0} o {1} não deve ser informada!", TipoCertificado.Descricao(), this.ObterPropriedadeInfo(c => c.Senha).Name));
if (value == _senha) return;
_senha = value;
}
}
/// <summary>
/// Id do certificado no cache do Zeus
/// </summary>
public string CacheId
{
get { return _cacheId; }
set
{
if (value == _cacheId) return;
_cacheId = value;
}
}
/// <summary>
/// Manter/Não manter os dados do certificado em Cache, enquanto a aplicação que consome a biblioteca estiver aberta
/// <para>Manter os dados do certificado em cache, aumentará o desempenho no consumo dos serviços, especialmente para certificados A3</para>
/// </summary>
public bool ManterDadosEmCache { get; set; }
/// <summary>
/// Algoritmo de Assinatura (Padrao: http://www.w3.org/2000/09/xmldsig#rsa-sha1)
/// </summary>
public string SignatureMethodSignedXml { get; set; }
/// <summary>
/// URI para DigestMethod na Classe Reference para auxiliar para a assinatura (Padrao: http://www.w3.org/2000/09/xmldsig#sha1)
/// </summary>
public string DigestMethodReference { get; set; }
/// <summary>
///
/// </summary>
public X509KeyStorageFlags KeyStorageFlags
{
get { return _keyStorageFlags; }
set
{
if (value == _keyStorageFlags) return;
_keyStorageFlags = value;
}
}
}
}