JONATHAN GEHARD KOHLERROGERIO BODEMULLER JUNIOR
CONTRIBUICOES AO SISTEMA DE GERENCIAMENTO DO CICLODE VIDA DE CERTIFICADOS DIGITAIS DA INFRA-ESTRUTURA DE
CHAVES PUBLICAS PARA PESQUISA E ENSINO (SGCI)
Florianopolis
2007
JONATHAN GEHARD KOHLERROGERIO BODEMULLER JUNIOR
CONTRIBUICOES AO SISTEMA DE GERENCIAMENTO DO CICLODE VIDA DE CERTIFICADOS DIGITAIS DA INFRA-ESTRUTURA DE
CHAVES PUBLICAS PARA PESQUISA E ENSINO (SGCI)
Trabalho de conclusao de curso apresentadocomo parte dos requisitos para obtencao do graude Bacharel em Ciencias da Computacao daUniversidade Federal de Santa Catarina
Professor Dr. Ricardo Felipe Custodio
UNIVERSIDADE FEDERAL DE SANTA CATARINA
CENTRO TECNOLOGICO
DEPARTAMENTO DE INFORMATICA E ESTATISTICA
CURSO DE CIENCIAS DA COMPUTACAO
Florianopolis
2007
Trabalho Final de conclusao de curso sob o tıtulo Contribuicoes ao Sistema de Gerencia-
mento do Ciclo de Vida de Certificados Digitais da Infra-Estrutura de Chaves Publicas para
Pesquisa e Ensino (SGCI), apresentado por Jonathan Gehard Kohler e Rogerio Bodemuller Ju-
nior como parte dos requisitos para obtencao do grau de Bacharel em Ciencias da Computacao,
e aprovado em 29 de outubro de 2007, em Florianopolis, estado de Santa Catarina, pela banca
examinadora constituıda por:
Prof. Ricardo Felipe Custodio, D.Sc.Orientador
Marcelo Carlomagno Carlos, M.Sc.Universidade Federal de Santa Catarina
Tulio Cıcero Salvaro de SouzaUniversidade Federal de Santa Catarina
Juliano RomaniUniversidade Federal de Santa Catarina
Dedico este trabalho a meus pais,
cuja humildade e trabalho tem sido
exemplo para minha vida,
e para minha namorada, pelo amor e apoio
recebido nos momentos difıceis.
Jonathan Gehard Kohler
Dedico este trabalho aos meus
pais e a minha namorada pelo apoio,
incentivo e carinho.
Rogerio Bodemuller Junior
AGRADECIMENTOS
Inicialmente agradeco as pessoas que mais me apoiaram durante a minha formacao, meus
Pais. Desde o inıcio da minha carreira academcia, sempre me ajudaram e deram apoio nos
momentos difıceis, nunca faltando paciencia e carinho.
Agradeco a minha namorada, pela paciencia e compreensao nas varias vezes em que nao
tive tempo para lhe dar a atencao devida. Agradeco tambem pelo grande apoio recebido durante
a minha caminhada academcia!
Deixo registrado o meu especial agradecimento ao professor Ricardo Felipe Custodio, pois
sem ele nao teria recebido a oportunidade de realizar este trabalho.
Quero agradecer especialmente o apoio dado pelos amigos Marcelo Carlomagno Carlos e
Juliano Romani, durante todo o decorrer do desenvolvimento deste trabalho.
Nao poderia deixar de citar os amigos do Laboratorio de Seguranca em Computacao (Lab-
SEC), que me ajudaram e apoiaram em todos os momentos. Tambem agradeco pela oportuni-
dade de te-los como verdadeiros amigos, ultrapassando os limites do simples relacionamento
profissional!
Agradeco a todos os outros amigos, que nao foram citados porem foram de extrema im-
portancia, pelo apoio e pelos momentos de alegrias gerados durante o curso.
(Jonathan Gehard Kohler)
Primeiramente gostaria de agradecer a todas as pessoas que me ajudaram de forma direta
ou indireta na realizacao deste trabalho.
Aos meus pais, Rogerio e Marilena, pelas oportunidades que me propiciaram para chegar
neste ponto, pelo imenso carinho que eles sempre tiveram comigo e pelos ensinamentos que eu
levarei para o resto da minha vida
A minha namorada Priscila, polo seu impagavel apoio, companheirismo, amor e amizade
alem da compreensao nos momentos de ausencia fısica e espiritual.
Ao amigo Jonathan, pelo esforco, paciencia e dedicacao durante a realizacao deste trabalho.
Ao professor Ricardo Felipe Custodio por ter dado o desafio inicial alem da oportunidade
de realizar este trabalho.
Ao amigo Marcelo Carlomagno Carlos por dedicar horas nos auxiliando, alem de seus
conhecimentos, paciencia e o enorme apoio na realizacao deste.
Nao devo esquecer de agradecer aos colegas de LabSEC por sempre sanarem minhas duvidas,
alem de nos apoiarem em todas as etapas do projeto.
(Rogerio Bodemuller Junior)
“Sorte e o que acontece
quando a preparacao
encontra a oportunidade.”
Darrel Royal
RESUMO
Um Sistema de Gerenciamento do Ciclo de Vida de Certificados Digitais permite gerenciar todoo ciclo de vida do certificado digital, o que envolve a emissao, publicacao e revogacao de certifi-cados digitais e a gerencia da Lista de Certificados Revogados. O Sistema de Gerenciamento doCiclo de Vida de Certificados Digitais pode ser utilizado para a implantacao e o gerenciamentode uma Infra-Estrutura de Chaves Publicas. Uma infra-estrutura de chaves publicas e compostapor Autoridades Certificadoras, Autoridades de Registro e Diretorios. Este trabalho consiste naanalise e aperfeicoamento de um SGC.
Palavras-Chave: Certificacao Digital, ICP
ABSTRACT
Write here abstract
Keywords:
LISTA DE FIGURAS
Figura 1 Esquema da metodologia do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Figura 2 Criptografia Simetrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Figura 3 Criptografia Assimetrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Figura 4 Funcionamento das paginas PHP.(ALVAREZ, 2005) . . . . . . . . . . . . . . . . . . . . . . . . 37
Figura 5 Relacionamento entre os grupos do Modulo de Certificacao Digital da biblioteca 47
Figura 6 Requisicao de Certificado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Figura 7 Diagrama de Classes do grupo Requisicoes de Certificado . . . . . . . . . . . . . . . . . . . 48
Figura 8 Modelo de transacao de duas partes (VIGIL, 2007) . . . . . . . . . . . . . . . . . . . . . . . . . 49
Figura 9 Modelo de transacao de tres partes (VIGIL, 2007) . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Figura 10 Diagrama de Classes do grupo Certificado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Figura 11 Extensao Authority Key Identifier (SUTIL, 2007) . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Figura 12 Diagrama de Classes do grupo Extensoes - Parte 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Figura 13 Diagrama de Classes do grupo Extensoes - Parte 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Figura 14 Diagrama de Classes do grupo Extensoes - Parte 3 . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Figura 15 Diagrama de Classes do grupo Padroes de Certificados . . . . . . . . . . . . . . . . . . . . . . 58
Figura 16 Diagrama de Classes do grupo Lista de Certificados Revogados . . . . . . . . . . . . . . 59
Figura 17 Diagrama de Classes dos grupos Identificadores de Objetos e RDNSequence . . 59
Figura 18 Diagrama de Classes das interfaces do grupo Engine . . . . . . . . . . . . . . . . . . . . . . . . 60
Figura 19 Diagrama de Classes das interfaces do grupo Funcao Resumo . . . . . . . . . . . . . . . . 61
Figura 20 Diagrama de Classes das interfaces do grupo Chave Simetrica . . . . . . . . . . . . . . . 62
Figura 21 Diagrama de Classes das interfaces do grupo Par de Chaves . . . . . . . . . . . . . . . . . 63
Figura 22 Diagrama de Classes das interfaces do grupo Chave Assimetrica . . . . . . . . . . . . . 64
Figura 23 Diagrama de Classes das interfaces do grupo Cifrador . . . . . . . . . . . . . . . . . . . . . . . 65
Figura 24 Diagrama de Classes das interfaces do grupo Assinador . . . . . . . . . . . . . . . . . . . . . 66
Figura 25 Camadas da Biblioteca de Seguranca do SGCI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Figura 26 Tela de exemplo de saıda do PHPUnit com Xdebug . . . . . . . . . . . . . . . . . . . . . . . . . 69
LISTA DE TABELAS
1 Agrupamento das classes do Modulo de Certificacao Digital . . . . . . . . . . . . . . . . . . p. 47
2 Nomenclatura dos bits do valor da extensao Key Usage . . . . . . . . . . . . . . . . . . . . . . . p. 52
3 Agrupamento das classes do Modulo de Criptografia . . . . . . . . . . . . . . . . . . . . . . . . . p. 60
LISTA DE ABREVIATURAS E SIGLAS
AC Autoridade Certificadora, p. 25
AES Advanced Encryption Standard, p. 22
AR Autoridade de Registro, p. 25
CAST128 Carlisle Adams and Stafford Tavares - 128 bits , p. 22
CG Comite Gestor, p. 27
CMMI Capability Maturity Model Integration, p. 16
DAP Directory Access Protocol, p. 63
DES Data Encryption Standard, p. 22
DP Diretorio Publico, p. 30
DPC Declaracao de Praticas de Certificacao, p. 18
DSA Digital Signature Algorithm, p. 24
ECC Elliptic Curve Cryptography, p. 23
HSM Hardware Security Module, p. 28
ICP Infra-Estrutura de Chaves Publicas, p. 15
ICP-Brasil Infra-Estrutura de Chaves Publicas Brasileira, p. 16
ICPEDU Infra-Estrutura de Chaves Publicas para Pesquisa e Ensino, p. 15
IDEA International Data Encryption Standard, p. 22
IP Internet Protocol, p. 51
ITI Instituto Nacional de Tecnologia da Informacao, p. 28
LabSEC Laboratorio de Seguranca em Computacao, p. 28
LCA Laboratorio de Criptografia Aplicada, p. 28
LCC Laboratorio de Computacao Cientıfica, p. 28
LCR Lista de Certificados Revogados, p. 25
LDAP Lightweight Directory Access Protocol, p. 15
LDIF LDAP Data Interchange Format, p. 63
LNCC Laboratorio Nacional de Computacao Cientıfica, p. 28
MD2 Message-Digest Algorithm 2, p. 24
MD4 Message-Digest Algorithm 4, p. 24
MD5 Message-Digest Algorithm 5, p. 24
MP Modulo Publico, p. 30
MVC Model-View-Control, p. 35
OID Object Identifier, p. 55
PC Polıticas de Certificacao, p. 18
PHP PHP: Hypertext Preprocessor, p. 33
PKI Public Key Infrastructure, p. 24
POO Programacao Orientada a Objetos, p. 40
RC5 Rivest Cipher 5, p. 22
RNP Rede Nacional de Ensino e Pesquisa, p. 15
SEI Software Engineering Institute, p. 16
SGC Sistema de Gerenciamento do Ciclo de Vida de Certificados Digi-
tais,
p. 15
SHA-1 Secure Hash Algorithm 1, p. 24
SHA-256 Secure Hash Algorithm 256, p. 24
SHA-512 Secure Hash Algorithm 512, p. 24
SVN Subversion, p. 17
UFF Universidade Federal Fluminense, p. 28
UFMG Universidade Federal de Minas Gerais, p. 28
UFSC Universidade Federal de Santa Catarina, p. 28
Unicamp Universidade Estadual de Campinas, p. 28
URL Uniform Resource Locator, p. 51
WEB World Wide Web, p. 32
XML Extensible Markup Language, p. 47
SUMARIO
1 INTRODUCAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 33
1.1 OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 33
1.1.1 OBJETIVO GERAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 33
1.1.2 OBJETIVOS ESPECIFICOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 33
1.2 JUSTIFICATIVA E MOTIVACAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 34
1.3 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 35
1.3.1 CMMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 35
1.3.2 METODOLOGIA DO TRABALHO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 35
1.4 LIMITACOES DO TRABALHO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 36
1.5 ESTRUTURA DO TRABALHO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 37
2 FUNDAMENTACAO TEORICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 38
2.1 SEGURANCA NO CONTEXTO MUNDIAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 38
2.2 CRIPTOGRAFIA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 39
2.2.1 CRIPTOGRAFIA SIMETRICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 39
2.2.2 CRIPTOGRAFIA ASSIMETRICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 40
2.3 FUNCAO RESUMO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 41
2.4 ASSINATURAS DIGITAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 42
2.5 INFRA-ESTRUTURA DE CHAVES PUBLICAS (ICP) . . . . . . . . . . . . . . . . . . . . . . . . . p. 42
2.5.1 CERTIFICADOS DIGITAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 43
2.5.2 AUTORIDADE CERTIFICADORA (AC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 44
2.5.3 AUTORIDADE DE REGISTRO (AR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 45
2.5.4 LISTA DE CERTIFICADOS REVOGADOS (LCR) . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 45
2.5.5 INFRA-ESTRUTURA DE CHAVES PUBLICAS BRASILEIRA (ICP-BRASIL) p. 45
2.5.6 INFRA-ESTRUTURA DE CHAVES PUBLICAS PARA PESQUISA E EN-
SINO (ICPEDU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 46
2.6 SISTEMA DE GERENCIAMENTO DO CICLO DE VIDA DE CERTIFICA-
DOS DIGITAIS DA ICPEDU (SGCI). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 47
2.6.1 VISAO GERAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 47
2.6.2 SISTEMA DE GERENCIAMENTO DO CICLO DE VIDA DE CERTIFICA-
DOS DIGITAIS DA ICPEDU (SGCI) VERSAO 1.2.0 . . . . . . . . . . . . . . . . . . . . . . . . . p. 49
3 TECNOLOGIAS UTILIZADAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 50
3.1 SUBVERSION (SVN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 50
3.2 TRAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 50
3.3 PHP: HYPERTEXT PREPROCESSOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 51
3.4 ZEND FRAMEWORK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 52
3.5 OPENSSL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 54
3.6 PHPUNIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 54
3.7 XDEBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 55
4 EVOLUCAO DO SISTEMA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 56
4.1 MELHORIAS EFETUADAS NA VERSAO 1.3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 56
4.2 ANALISE E PROJETO DA VERSAO 2.0.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 57
4.2.1 ANALISE DE REQUISITOS DO SGCI VERSAO 2.0.0 . . . . . . . . . . . . . . . . . . . . . . p. 57
4.2.2 CASOS DE USO DO SGCI VERSAO 2.0.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 59
4.2.3 BIBLIOTECA DE SEGURANCA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 60
5 CONSIDERACOES FINAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 85
REFERENCIAS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 87
APENDICES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 92
APENDICE A -- PLANO DE TESTES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 92
APENDICE B -- PLANOS DE REQUISITOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 149
APENDICE C -- CASOS DE USO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 157
APENDICE D -- CODIGO-FONTE DA BIBLIOTECA. . . . . . . . . . . . . . . . . . . . . . . . . . . p. 158
18
1 INTRODUCAO
Muitas empresas ja sofreram ataques atraves da Internet e os culpados nao foram puni-
dos. Para solucionar este e outros problemas, foram criadas varias tecnologias para aumentar a
seguranca das informacoes que sao transmitidas pela Internet.
Uma solucao, normalmente utilizada, e a Certificacao Digital. Formada por entidades
confiaveis e documentos eletronicos chamados certificados digitais. A partir da necessidade
de gerenciar esta estrutura, e que este trabalho se insere. Analisar e propor melhorias em um
Sistema de Gerenciamento do Ciclo de Vida de Certificados Digitais. Sera utilizado o Sis-
tema de Gerenciamento do Ciclo de Vida de Certificados Digitais da Infra-Estrutura de Chaves
Publicas para Pesquisa e Ensino, mantido pela Rede Nacional de Ensino e Pesquisa.
Durante um perıodo de tempo, este software foi analisado e recebeu modificacoes. Apos
uma certa experiencia com ele, foi realizada a proposta de uma nova implementacao que traria
melhorias tanto para a parte de usuario final, quanto para os desenvolvedores do software. Alem
de ser modificado toda a parte polıtica de gerenciamento do ciclo de vida do sistema.
1.1 OBJETIVOS
Abaixo, serao apresentados os objetivos deste trabalho.
1.1.1 OBJETIVO GERAL
O objetivo deste trabalho e realizar a analise do Sistema de Gerenciamento do Ciclo de Vida
de Certificados Digitais da ICPEDU (SGCI) atual, propor uma especificacao para a criacao
de uma nova versao deste software a fim de que esta seja mais abragente, robusto, seguro e
atualizado com as novas tecnoligias existentes, e adicionalmente implementar uma blibioteca
para prover as funcoes criptograficas necessarias a implementacao deste software.
1.1.2 OBJETIVOS ESPECIFICOS
Os objetivos especıficos deste trabalho sao:
19
• Reorganizar a estrutura do programa atual a fim de melhorar a seguranca restringindo o
acesso aos arquivos cujo acesso deve ser restrito.
• Preparar uma documentacao rica, a fim de facilitar a implementacao do sistema.
• Modularizar o sistema, tornando cada modulo independente do todo.
• Adicionar suporte a emissao de certificados Extended Validation SSL Certificates (EV
SSL);
• Adicionar suporte para integracao do SGCI a um Lightweight Directory Access Protocol
(LDAP) (ZEILENGA, 2006)
• Criar uma biblioteca critografica em PHP
1.2 JUSTIFICATIVA E MOTIVACAO
Certificados digitais sao como documentos autenticados, que atestam que uma determinada
pessoa e ela mesma. Assim, voce sabe que esta trocando informacoes com uma determinada
pessoa ou empresa, e nao com um sujeito qualquer.
Estes certificados de nada iriam servir, se cada pessoa pudesse criar o seu. Qualquer sujeito
poderia criar o seu certificado digital, e enganar os outros usuarios da Internet. Para isto, foi
criada toda uma estrutura, chamada de Infra-Estrutura de Chaves Publicas (ICP), que geral-
mente e comandada por orgaos governamentais. Estas ICPs sao as responsaveis pela emissao
dos certificados digitais.
Cada ICP necessita de um software para gerenciar estes certificados, e e neste ambito que
este trabalho se insere. Aprimorar um Sistema de Gerenciamento do Ciclo de Vida de Certifi-
cados Digitais (SGC) pre-existente.
O SGC que sera utilizado como base para este trabalho e o SGCI, que foi desenvolvido
para gerenciar a Infra-Estrutura de Chaves Publicas para Pesquisa e Ensino (ICPEDU) da Rede
Nacional de Ensino e Pesquisa (RNP). Esta ICP foi criada para ser utilizada nas universidades,
com o intuito de familiarizar os alunos a utilizarem certificados digitais.
Ao entrar no mercado de trabalho, o aluno da universidade ja estara familiarizado com o
funcionamento dos certificados digitais. A unica diferenca, e que agora quem emitira o certifi-
cado, sera a Infra-Estrutura de Chaves Publicas Brasileira (ICP-Brasil), e nao mais a ICPEDU.
20
Uma falha de seguranca em um sistema desses e algo muito perigoso e crıtico! A partir
deste ponto parte a motivacao para o trabalho, efetuar melhorias de robustez e seguranca em um
sistema aonde a seguranca e um dos fatores mais crıticos.
1.3 METODOLOGIA
A seguir serao apresentadas as etapas deste trabalho, afim de que os objetivos sejam atingi-
dos.
1.3.1 CMMI
Capability Maturity Model Integration (CMMI) e um modelo de processo criado pela Soft-
ware Engineering Institute (SEI) que contem os elementos essenciais para as organizacoes cons-
truırem processos efetivos e de qualidade.
Ele pode ser utilizado para melhorias em um projeto, uma divisao ou em uma organizacao
inteira(WHAT. . . , 2007). A principal meta e a qualidade do processo, sob o ponto de vista
gerencial.
Alguns motivos para se adotar CMMI:
• A qualidade do produto final e influenciada diretamente pela qualidade do processo (um
bom processo, produz um bom produto);
• Melhorias no processo aumentam a produtividade e a qualidade do produto final;
• Os problemas sao reconhecidos e corrigidos quando ocorrem, e nao somente no final do
processo;
• Os prazos sao cumpridos com maior fidelidade ao planejamento.
1.3.2 METODOLOGIA DO TRABALHO
Este trabalho se divide em tres etapas:
1. Realizar estudos sobre o SGCI versao 1.3.0;
2. Desenvolver melhorias e corrigir erros no SGCI versao 1.3.0;
3. Propor uma nova versao para o SGCI.
21
Na primeira etapa foi feito um estudo sobre o funcionamento do SGCI. Nesta fase, percebeu-
se a dificuldade de utilizar um software sem muita documentacao.
Apos este estudo, foi criado um plano de testes com o proposito de detectar o maior numero
de problemas existentes no SGCI. Este plano de testes pode ser encontrado no apendice A.
Com o plano de testes pronto, deu-se inıcio a segunda etapa do trabalho. Foram executa-
dos os testes do plano de testes, e encontraram-se varios erros. Atraves destes testes, tambem
surgiram ideias sobre melhorias e novas funcionalidades para o SGCI.
A segunda etapa foi muito importante pois possibilitou uma compreensao mais aprofundada
de como funciona um SGC. Tambem foi importante para criar experiencias praticas, essencial
para realizar o projeto do SGCI versao 2.0.0.
Apos a segunda etapa realizada, iniciou-se o analise e projeto do SGCI 2.0.0. O resultado
desta etapa, sera detalhado no decorrer deste trabalho.
Os benefıcios apresentados na secao 1.3.1 foram os principais motivos para a metodologia
deste trabalho ser baseada no modelo de processos CMMI. A ultima etapa foi baseada em
CMMI nıvel 2.
A Figura1 apresenta a divisao do trabalho. A Equipe de Projeto desenvolve as especificacoes.
O plano de testes (uma parte das especificacoes) e enviado a Equipe de Testes. O resto das
especificacoes (modelos, diagramas, etc) e enviado a Equipe de Desenvolvimento. Esta ultima
implementa o software, fazendo uso do Subversion (SVN) (maiores detalhes na secao 3.1). A
equipe de testes realiza os testes especificados no plano de testes, e os problemas sao reportados
ao TRAC (maiores detalhes na secao 3.2). Apos uma versao estavel estar pronta, esta e publi-
cada no TRAC. Os usuarios finais testam a nova versao e postam os problemas e sugestoes que
encontraram no TRAC.
Os testes foram divididos em dois grupos: os que necessitam da intervencao humana e os
que podem ser automatizados. Os testes do primeiro grupo foram feitos pela equipe de testes, e
os outros pelos desenvolvedores.
1.4 LIMITACOES DO TRABALHO
Embora existam outros modelos de ICP e certificados digitais tais como o SPKI (ELLISON
et al., 1999) e o PGP (CALLAS et al., 1998), o escopo deste trabalho se restringe apenas ao
padrao X.509 (ITU-T, 2005).
22
Figura 1: Esquema da metodologia do trabalho
Este trabalho nao trata diretamente das implicacoes da aplicacao dos metodos descritos
sobre os documentos de Polıticas de Certificacao (PC) e Declaracao de Praticas de Certificacao
(DPC) de uma ICP.
1.5 ESTRUTURA DO TRABALHO
No capıtulo 2 sao abordados os principais conceitos de seguranca computacional, tais como
criptografia, assinatura digital, certificado digital, ICP e e feita uma breve abordagem sobre o
SGCI.
As principais tecnologias utilizadas durante o desenvolvimento deste trabalho sao apresen-
tadas no capıtulo 3. Sao apresentadas a linguagem utilizada, as ferramentas de controle de
modificacoes, a biblioteca de seguranca, e as ferramentas para testes utilizadas.
O capıtulo 4 traz as melhorias efetuadas no SGCI versao 1.3.0 e a proposta para o SGCI
versao 2.0.0. Contem a analise de requisitos e especificacao dos casos de uso, alem das especificacoes
da biblioteca de seguranca desenvolvida, seus requisitos e uma explicacao sobre o desenvolvi-
mento de aplicacoes utilizando esta biblioteca.
Por fim, no capıtulo 5, sao apresentadas as conclusoes do trabalho desenvolvido, juntamente
com as sugestoes de trabalhos futuros.
23
2 FUNDAMENTACAO TEORICA
Neste capıtulo serao abordados varios temas sobre seguranca que servem para um maior
embasamento do contexto em que se insere este trabalho.
2.1 SEGURANCA NO CONTEXTO MUNDIAL
Segundo Tzu (2002), o que e de suprema importancia na guerra e atacar a estrategia do
inimigo. Guerras de informacoes acontecem constantemente em todo o mundo. Um dos exem-
plos mais recentes foram os acontecimentos da guerra do Iraque. Enquanto Estados Unidos
divulgavam determinadas informacoes, o Iraque divulgava outras. E assim, foram moldando a
opiniao publica contra o seu inimigo e ao seu favor.
Neste trabalho, entende-se por informacao todo e qualquer conteudo ou dado que tenha
algum valor. Seguranca da informacao entende-se pela protecao existente sobre determinada
informacao.
De acordo com a norma ISO/IEC 17799 (a NBR ISO/IEC 17799 e a versao brasileira desta
norma, homologada pela ABNT em setembro de 2001) a seguranca da informacao esta funda-
mentada em tres pilares: confidencialidade, integridade, e disponibilidade da informacao. Estes
conceitos podem ser sucintamente definidos como:
• Confidencialidade - a informacao so estara disponıvel para aqueles devidamente autori-
zados;
• Integridade - a informacao deve manter todas as propriedades definidas pelo seu autor;
• Disponibilidade - a informacao deve estar sempre disponıvel para aqueles que estao au-
torizados.
Atualmente, a troca de informacoes atraves de meios digitais tornou-se um dos princi-
pais problemas de seguranca. Diversos sistemas utilizados nao foram projetados para garantir
seguranca sobre as informacoes. Informacoes extremamente sigilosas percorrem nestes siste-
24
mas, e consequentemente, algum mecanismo de seguranca deve ser utilizado. Uma das manei-
ras de se garantir isto e cifrando as informacoes.
2.2 CRIPTOGRAFIA
Criptografia, do grego Kryptos (ocultar) e grafos (escrever), significa ”escrita oculta”. O seu
uso data do antigo Egito (onde os faraos mandavam ocultar informacoes sobre os seus tesouros)
e foi fundamental nos capıtulos mais delicados da historia da humanidade. Usada na antiga
Roma por Julio Cesar (50 a.C.), foi sempre arma de militares, diplomaticos e espioes, e e a
defesa das comunicacoes e dos dados que circulam na grande rede que une o mundo, a Internet.
A protecao da informacao e feita mudando a sua forma, por meio do processo chamado
cifragem (ou transformacao criptografica), na qual um texto legıvel e tornado ilegıvel. Analogi-
camente, o processo inverso chama-se decifragem, onde o texto ilegıvel, ou cifrado, e tornado
legıvel como na sua forma original.
“A criptografia e a arte e ciencia de cifrar e decifrar mensagens de maneira a estabelecer
um canal de comunicacao sigiloso entre as pessoas envolvidas na troca de informacao.” (GILL,
2002).
A cifragem de uma mensagem baseia-se em dois componentes: um algoritmo e uma chave.
Uma chave e uma cadeia aleatoria de bits utilizada em conjunto com um algoritmo. Cada chave
distinta faz com que o algoritmo trabalhe de forma ligeiramente diferente. Um algoritmo e uma
transformacao matematica, ele converte uma mensagem em claro em uma mensagem cifrada e
vice-versa.
O numero de chaves possıveis depende do tamanho da chave. Por exemplo, uma chave de
8 bits permite uma combinacao de no mınimo 256 chaves (28). Quanto maior o tamanho da
chave, mais difıcil sera quebra-la, pois estaremos aumentando o numero de combinacoes.
O modo como sao empregadas as chaves podem ser divididas em:
• Criptografia Simetrica;
• Criptografia Assimetrica.
2.2.1 CRIPTOGRAFIA SIMETRICA
Na criptografia simetrica, a mesma chave e utilizada para cifrar e decifrar uma mensa-
gem(ver Figura2). Estas chaves precisam ser compartilhadas entre o emissor e o receptor por
25
algum outro meio, antes que a comunicacao seja firmada.
Apesar de sua simplicidade, segundo Schneier (1996) existem alguns problemas com a
criptografia simetrica:
• como cada par necessita de uma chave para se comunicar de forma segura, para um uma
rede de x usuarios precisarıamos de algo da ordem de x(x−1)/2 chaves, quantidade esta
que dificulta a gerencia das chaves;
• a chave deve ser trocada entre as partes e armazenada de forma segura, o que nem sempre
e facil de ser garantido;
• a criptografia simetrica nao garante a identidade de quem enviou ou recebeu a mensagem
(autenticidade e nao-repudio).
Figura 2: Criptografia Simetrica
Os algoritmos comumente utilizados sao: Advanced Encryption Standard (AES), Data En-
cryption Standard (DES), Blowfish, International Data Encryption Standard (IDEA), Carlisle
Adams and Stafford Tavares - 128 bits (CAST128) e o Rivest Cipher 5 (RC5).
2.2.2 CRIPTOGRAFIA ASSIMETRICA
A criptografia assimetrica utiliza um par de chaves, uma chave publica e uma chave privada,
conforme demonstrado na Figura 3. A chave publica pode ser distribuıda livremente, enquanto
a chave privada deve ser de conhecimento apenas de seu dono. Uma mensagem cifrada com
a chave publica pode somente ser decifrada pela sua chave privada. Do mesmo modo, uma
mensagem cifrada com a chave privada pode somente ser decifrada pela chave publica corres-
pondente.
A vantagem deste sistema e poder enviar uma mensagem secreta utilizando apenas a chave
publica do receptor. Como a chave publica esta amplamente disponıvel, nao ha necessidade
do envio de chaves como e feito no modelo simetrico. A confidencialidade da mensagem e
26
Figura 3: Criptografia Assimetrica
garantida enquanto a chave privada estiver segura. Caso contrario quem possuir acesso a chave
privada tera acesso as mensagens.
Os algoritmos comumente utilizados sao: RSA, ElGamal e o Elliptic Curve Cryptography
(ECC).
2.3 FUNCAO RESUMO
Em criptografia, funcao resumo e uma sequencia de bits de tamanho fixo que representa um
resumo de uma mensagem. Segundo Stinson (2002), funcao resumo e usada para construir uma
pequena impressao digital de algum dado; se o dado for alterado, entao a impressao digital nao
sera mais valida.
O conceito teorico diz que “funcao resumo e a transformacao de uma grande quantidade de
informacoes em uma pequena quantidade de informacoes”
Uma funcao resumo (h) e um algoritmo que mapeia uma sequencia de bits (x) de tamanho
arbitrario, para uma sequencia de bits de tamanho fixo menor, chamada resumo (h(x)). Como
resultado, e possıvel garantir integridade do documento, pois o resumo da mensagem enviada
deve ser o mesmo da mensagem recebida.
Segundo Stallings (2003) a funcao resumo deve possuir as seguintes propriedades:
• h deve poder ser aplicado sobre uma sequencia de bits de qualquer tamanho;
• h deve produzir um resultado de tamanho fixo;
• h(x) deve ser relativamente facil de computar, a partir de x;
• dado um h(x), deve ser impraticavel encontrar um x;
• deve ser impraticavel encontrar um x’, dado que h(x’)=h(x);
27
A funcao resumo tambem pode ser chamada por: Message Digest, One-Way Hash Func-
tion, Funcao de Condensacao, Funcao de Espalhamento Unidirecional ou Funcao Hashing. Os
algoritmos comumente utilizados sao: Message-Digest Algorithm 2 (MD2), Message-Digest
Algorithm 4 (MD4), Message-Digest Algorithm 5 (MD5), Secure Hash Algorithm 1 (SHA-1),
Secure Hash Algorithm 256 (SHA-256) e Secure Hash Algorithm 512 (SHA-512).
2.4 ASSINATURAS DIGITAIS
Segundo Stallings (2003), para garantir a autoria de um documento, usa-se a assinatura –
seja ela digital ou nao. A assinatura digital e uma sequencia de caracteres binarios determinada
com base numa mensagem e algo que associa o assinante a esta mensagem. Esta associacao
pode ser feita atraves de algo que se possui, algo que se sabe ou algo que se e; como exemplo
terıamos um cartao magnetico, uma senha, e a ıris do assinante respectivamente.
A assinatura digital garante que o receptor da mensagem pode confirmar se assinatura do
emissor e autentica (autenticacao), garante que a mensagem realmente provem de determinado
remetente (nao-repudio) e garante que a mensagem nao foi adulterada (integridade). Para criar
uma assinatura digital para uma determinada mensagem, deve-se calcular a funcao resumo da
mesma, apos isso, cifrar o resumo com a chave privada do emissor e enviar junto com a men-
sagem original. Para verificar a assinatura, e necessario primeiramente decifrar a assinatura
digital, com a chave publica do emissor, depois calcular a funcao resumo da mensagem rece-
bida e comparar os resultados. Se forem iguais, a assinatura e valida.
Os padroes largamente utilizados sao o RSA, Digital Signature Algorithm (DSA), ElGamal
e o ECC.
2.5 INFRA-ESTRUTURA DE CHAVES PUBLICAS (ICP)
Do ingles Public Key Infrastructure (PKI), “Infra-Estrutura de Chaves Publicas e um con-
junto de tecnicas, praticas e procedimentos elaborado para suportar um sistema criptografico
com base em certificados digitais” (CUSToDIO et al., 2005). Esta infra-estrutura tem como
principais funcoes dar suporte aos processos de geracao, armazenamento, distribuicao, arquiva-
mento e revogacao de certificados digitais. Uma ICP baseia-se em um sistema de confianca, no
qual duas partes confiam mutuamente em uma terceira para verificar e confirmar a identidade
de ambas as partes.
Para tanto, uma ICP possui ferramentas que sao utilizadas pelos seguintes componentes:
28
• As autoridades: as principais sao Autoridade Certificadora (AC) e Autoridade de Registro
(AR). Existem outras autoridades auxiliares, mas nao serao abordadas;
• Os clientes: divididos em dois tipos nao mutuamente exclusivos: aqueles que efetiva-
mente possuem um certificado digital e aqueles que querem verificar a validade de um
certificado;
• O repositorio: onde sao armazenados e disponibilizados os certificados, Lista de Certifi-
cados Revogados (LCR) e afins.
Segundo (CUSToDIO; FREITAS, 2004) As quatro ferramentas basicas utilizadas sao:
• Certificado da chave publica propriamente dito;
• LCR;
• PC;
• Caminho de Certificacao.
2.5.1 CERTIFICADOS DIGITAIS
Uma carteira de identidade e emitida por um orgao confiavel e contem um conjunto de
informacoes que identificam o seu dono. O analogo no mundo virtual e o certificado digi-
tal. Segundo Fernandes (2001)Um certificado digital pode ser definido como um documento
eletronico, assinado digitalmente por uma terceira parte confiavel, que associa o nome (e atribu-
tos) de uma pessoa ou instituicao a uma chave criptografica publica. Este arquivo normalmente
e guardado em um token ou em um smart card.
Um certificado associa uma chave publica e um nome unico para um usuario. O padrao nor-
malmente utilizado e o X.509 v.3 (ITU-T, 2005). Segundo Housley et al. (2002) Um certificado
que utiliza este padrao possui os seguintes campos:
• Versao do certificado;
• Numero serial;
• Identificador do algoritmo da assinatura;
• Nome do emissor;
• Perıodo de validade;
29
• Nome do usuario;
• Informacao sobre a chave publica do sujeito;
• Identificador unico de emissor;
• Identificador unico de usuario;
• Extensoes;
• Assinaturas.
O objetivo da assinatura digital no certificado digital e indicar que uma terceira parte, nor-
malmente uma AC, garante a veracidade das informacoes.
Para a emissao de um certificado digital, um usuario faz uma requisicao e encaminha a
uma entidade. Depois do recebimento da requisicao, e realizada uma serie de procedimentos,
normas e padroes que comprovam a identidade do requisitante. Apos este processo, e emitido
o certificado. Este normalmente e publicado em um diretorio publico e tambem e encaminhado
para o seu requisitante.
Uma mesma entidade possui muitos servicos (verificar requisicoes, emitir certificados, re-
vogar certificados, etc), o que dificulta o controle. Para isto, as entidades geralmente sao dividas
em duas: Autoridade Certificadora e Autoridade de Registro.
2.5.2 AUTORIDADE CERTIFICADORA (AC)
AC e o bloco fundamental na construcao de uma ICP. Ela e a terceira parte confiavel
para a emissao de um certificado digital. E responsavel pela emissao, distribuicao, renovacao,
revogacao e gerenciamento dos certificados alem da responsabilidade de emissao e gerencia-
mento de LCR.
Uma AC pode emitir certificados para usuarios, para outras ACs e para ARs. Um certificado
emitido e assinado com a chave privada da AC, e deste modo, pode ser comprovado a sua
autenticidade verificando-se a assinatura com a chave publica desta AC.
Numa hierarquia, cada AC tem credibilidade e e conhecida por todas as outras entidades
participantes. Uma AC Raiz e uma AC que assina seu certificado com a sua propria chave
privada. Uma AC subordinada e uma AC cujo certificado e assinado pela sua AC imediatamente
superior. Isto e feito para melhorar a performance, para facilitar a administracao e por questoes
de seguranca.
30
A sequencia de certificados entre uma AC Raiz e a ultima AC subordinada e chamado de
cadeia de certificacao.
E importante ressaltar que a principal responsabilidade da AC e manter a sua chave privada
segura pois, com ela seria possıvel emitir qualquer certificado. Por este motivo, uma boa pratica
utilizada e manter a AC totalmente off-line, normalmente em uma sala-cofre.
2.5.3 AUTORIDADE DE REGISTRO (AR)
Segundo Ignaczak (2002) pode-se entender a AR como uma interface entre ACs e usuarios
que desejam obter um certificado. A AR e a entidade de uma ICP responsavel pelo recebi-
mento de requisicoes, validacao das informacoes contidas na requisicao e encaminhamento de
solicitacao ou revogacao de certificados digitais as ACs, que possuem relacao de confianca com
esta AR.
Ela atua recebendo as requisicoes de certificados e executando a checagem dos dados do
requisitante. Assim que os dados sao verificados, estes e a chave publica da AR formam uma
requisicao de certificado. A AR assina a requisicao e a envia para a AC. Esta verifica a assinatura
da AR e emite o certificado sem nenhuma verificacao adicional.
2.5.4 LISTA DE CERTIFICADOS REVOGADOS (LCR)
A LCR tem como objetivo publicar quais certificados nao-expirados e emitidos por uma
AC deixaram de ser validos (HOUSLEY; POLK, 2001). Assim como os certificados, a LCR e
um objeto eletronico emitido e assinado por uma AC. E funcao desta, publicar periodicamente,
ou sob demanda, a sua LCR.
A RFC 3280 (HOUSLEY et al., 2002) define o conteudo de uma LCR. Os principais dados
sao: informacoes sobre a AC emissora da LCR, a data de emissao da LCR, alem dos numeros
de serie dos certificados revogados ou suspensos e as datas de revogacao destes.
2.5.5 INFRA-ESTRUTURA DE CHAVES PUBLICAS BRASILEIRA (ICP-BRASIL)
A ICP-Brasil foi criada pelo governo federal em 2001. Em julho deste mesmo ano foram
regulamentadas as atividades do Comite Gestor (CG) da ICP-Brasil atraves do decreto 3.872. E
em 24 de agosto de 2001 a ICP-Brasil foi instituıda pela Medida Provisoria 2.200-2.
“A ICP-Brasil e um conjunto de tecnicas, praticas e procedimentos, a ser implementado
pelas organizacoes governamentais e privadas brasileiras com o objetivo de estabelecer os fun-
31
damentos tecnicos e metodologicos de um sistema de certificacao digital baseado em chave
publica.” (ITI, 2007). E mantida pelo Instituto Nacional de Tecnologia da Informacao (ITI),
entidade publica federal ligada a Casa Civil da Presidencia da Republica, e AC Raiz desta ICP.
A medida provisoria numero 2.200-2 define que a ICP-Brasil tem como objetivo garantir
a autenticidade, a integridade e a validade jurıdica de documentos em forma eletronica, das
aplicacoes de suporte e das aplicacoes habilitadas que utilizem certificados digitais, bem como
a realizacao de transacoes eletronicas seguras. Ela possui uma AC-Raiz, dezenas de ACs cre-
denciadas, quase uma centena de ARs credenciadas e o CG. Este grupo e a autoridade gestora
de polıticas e e composto por representantes de orgaos publicos e da sociedade civil.
“A ICP-Brasil tem objetivos muito diferentes da ICP-EDU. A ICP-Brasil foiconcebida e esta sendo montada para ser utilizada no governo brasileiro etambem por qualquer instituicao externa que com ele queira se comunicarpor via eletronica de forma segura. Os certificados digitais emitidos pelaICP-Brasil deverao ter valor jurıdico em eventuais disputas envolvendo seususuarios.”(ROCHA, 2004).
2.5.6 INFRA-ESTRUTURA DE CHAVES PUBLICAS PARA PESQUISA E ENSINO (IC-PEDU)
Projeto idealizado em 2003 pela RNP, segundo Custodio (2004) a ICPEDU tem como ob-
jetivo principal a criacao das condicoes necessarias para implantacao de uma ICP no ambito
academico. Assim, as instituicoes academicas poderao emitir seus proprios certificados digitais
para suas aplicacoes internas, tais como sistemas de controle academico, acesso a base de dados
e pesquisa e ensino de seguranca computacional.
Os principais resultados, ate o momento, foram o desenvolvimento de um SGC denominado
Sistema de Gerenciamento do Ciclo de Vida de Certificados Digitais da ICPEDU, o desenvol-
vimento de um Modulo de Hardware Criptografico — do ingles Hardware Security Module
(HSM) — e o entendimento das polıticas e boas praticas de certificacao.
Atualmente ele e desenvolvido numa parceria entre as equipes do Laboratorio de Seguranca
em Computacao (LabSEC) da Universidade Federal de Santa Catarina (UFSC), Laboratorio de
Criptografia Aplicada (LCA) da Universidade Estadual de Campinas (Unicamp), Laboratorio
de Computacao Cientıfica (LCC) da Universidade Federal de Minas Gerais (UFMG), Insti-
tuto de Computacao da Universidade Federal Fluminense (UFF), o Laboratorio Nacional de
Computacao Cientıfica (LNCC) e a RNP.
32
2.6 SISTEMA DE GERENCIAMENTO DO CICLO DE VIDA DE CERTI-FICADOS DIGITAIS DA ICPEDU (SGCI)
2.6.1 VISAO GERAL
Para a conclusao de uma das etapas do projeto ICPEDU, era necessario desenvolver um soft-
ware para a operacao e a gestao confiavel de uma ICP voltada ao meio academico. Com este in-
tuito foi idealizado o SGCI. Este software deve ser capaz de gerenciar uma infra-estrutura de cer-
tificados digitais X.509 ao longo de todo o seu ciclo de vida (emissao, publicacao, revogacao).
Segundo (CUSToDIO, 2004), um dos principais requisitos para o SGCI e a sua total implementacao
em software livre. Existiam varias solucoes prontas, tais como OpenCA(OPENCA. . . , 2007)
e NewPKI(GIUDICELLI, 2007), porem elas nao proviam todas as funcionalidades desejadas,
nao previam todas as aplicacoes e nao eram flexıveis o suficiente.
Segundo Custodio (2006), algumas aplicacoes previstas para este software seriam:
• Internas as universidades:
– controle no uso compartilhado dos recursos internos
– eliminacao do papel nos tramites burocraticos
∗ controle academico seguro
• Entre universidades ligadas a RNP:
– eliminacao do papel nos tramites burocraticos
∗ comunicacao com garantia de autenticidade
∗ privacidade nas comunicacoes de dados
– uso compartilhado seguro dos recursos disponıveis
Segundo Custodio (2004) Os componentes desta ICP serao:
• Sistema Gestor;
• Diretorio publico;
• Modulo publico.
Estes componentes serao detalhados nas secoes seguintes.
33
SISTEMA GESTOR
O Sistema Gestor e o software que realiza todas as operacoes de uma entidade. O Sistema
Gestor pode ser dividido em tres modulos:
• Modulo de Gerenciamento – Neste modulo sao criadas as entidades, os administrado-
res (usuarios responsaveis pelo modulo administrativo) e definidas as configuracoes (por
exemplo configuracoes do HSM). Este modulo tambem e o responsavel pelas operacoes
de backup e exportacao de logs.
• Modulo Administrativo – Este modulo e responsavel pela parte administrativa das en-
tidades. Aqui sao configurados as relacoes de confianca, as polıticas e adicionados os
operadores (usuarios responsaveis pelo modulo operacional).
• Modulo Operacional – Este modulo e responsavel pelos processos operacionais das enti-
dades. Os processos suportados pelo modulo sao:
– Gerenciamento de requisicoes (aprovacao e rejeicao);
– Revogacao de certificados;
– Emissao de certificados e LCRs.
DIRETORIO PUBLICO (DP)
Diretorio Publico (DP) e um “banco de dados especializado em pesquisas simples que prove
certificados e LCRs quando solicitado. Consiste em um sistema, conhecido pelo seu endereco e
pelo protocolo de acesso.” (CUSToDIO et al., 2005). Um DP em uma ICP tem como principal
funcao armazenar e disponibilizar “certificados e LCR’s para qualquer requerente. Consiste em
um sistema robusto, escalavel e on-line conhecido pelo seu endereco e pelo protocolo de acesso.
Um diretorio publico nao fornece nenhum tipo de seguranca em relacao aos dados armaze-
nados. Ele nao e uma entidade confiavel. Por este motivo, os certificados e LCRs sao assinados
por alguma AC confiavel. Os dados devem sempre estar atualizados e com um alto nıvel de
disponibilidade.
MODULO PUBLICO (MP)
O Modulo Publico (MP) ”e um sistema para solicitacao on-line de certificados, disponıvel
aos usuarios finais das ACs. O MP dispara procedimentos para geracao do par de chaves e da
requisicao do usuario e encaminha esta para uma determinada AR.“ (CUSToDIO et al., 2005).
34
Depois que o usuario insere seus dados e faz o pedido, o MP encaminha uma requisicao
para uma AR. E verificado se a requisicao e valida e se existe relacao de confianca entre a AC
e a AR definida pelo usuario. Passado por esta etapa, a requisicao e inserida para ser analisada
pela AR.
2.6.2 SISTEMA DE GERENCIAMENTO DO CICLO DE VIDA DE CERTIFICADOS DI-GITAIS DA ICPEDU (SGCI) VERSAO 1.2.0
O SGCI 1.2.0 foi desenvolvido utilizando os seguintes softwares livres: PHP (PHP. . . , 200-
), Apache (APACHE, 200-), PostgreSQL (POSTGRESQL, 200-), OpenSSL (OPENSSL, 200-)
e OpenLDAP (OPENLDAP, 200-).
Este software foi dividido em tres modulos. Cada modulo e suas respectivas funcoes sao
descritas a seguir:
• Modulo Criador: Segundo Custodio et al. (2005), o modulo criador e responsavel pela
disponibilizacao das entidades a serem gerenciadas pelo gestor e a designacao dos usuarios
administradores para estas. Alem destas funcoes, este modulo possui suporte ao geren-
ciamento de usuarios e administradores. Os seguintes tipos de entidades podem ser ge-
renciadas: ACs e ARs. Gerenciar estas envolve o processo de criacao e integracao das
mesmas.
• Modulo AC: Este modulo e responsavel pelas funcionalidades competentes a uma AC.
Ele e dividida em duas areas:
– Administracao: competem a esta parte do modulo a definicao de polıticas, o controle
dos relacionamentos de confianca, cadastramento de modelos de certificado e de
extensoes para os certificados e o gerenciamento de operadores.
– Operacao: esta parte do modulo e responsavel pelo gerenciamento de emissao e
revogacao.
• Modulo AR: Este modulo e responsavel pelas funcionalidades competentes a uma AR.
Ele e dividida em duas areas:
– Administracao: competem a esta parte do modulo o controle dos relacionamentos
de confianca e o gerenciamento de operadores.
– Operacao: esta parte do modulo e responsavel requisitar a revogacao de certificados
e por avaliar as requisicoes recebidas, aprovar e encaminhar para a AC de destino
ou rejeita-la.
35
3 TECNOLOGIAS UTILIZADAS
Neste capıtulo serao apresentadas as tecnologias utilizadas durante o desenvolvimento deste
trabalho.
3.1 SUBVERSION (SVN)
“Subversion e um sistema de controle de versao livre/open-source”(COLLINS-SUSSMAN;
FITZPATRICK; PILATO, 2004), o qual permite que varias pessoas trabalhem em um mesmo
software. Estas podem trabalhar simultaneamente em arquivos diferentes, ou no mesmo ar-
quivo (em partes diferentes deste arquivo). O SVN faz o controle das edicoes feitas, deixando
os usuarios livres da tarefa de mesclar o resultado final. Estes arquivos ainda podem estar loca-
lizados remotamente em algum servidor, deixando o usuario livre para editar o documento em
qualquer lugar que possua acesso ao servidor.
O SVN mantem um registro de eventos para controle das versoes do arquivo (a cada
alteracao feita, uma nova versao e criada). Neste log e registrado quando e por quem foi modi-
ficado o arquivo. “[. . . ]se alguma mudanca incorreta e feita nos dados, simplesmente desfaca
essa mudanca.”(COLLINS-SUSSMAN; FITZPATRICK; PILATO, 2004).
Esta ferramenta foi escolhida por motivo deste trabalho ser um trabalho colaborativo, cri-
ando a necessidade de algum software para fazer a gestao das modificacoes.
3.2 TRAC
TRAC e uma ferramenta open-source de interface World Wide Web (WEB) para monito-
ramento de mudancas em projetos de desenvolvimento de software. Ele oferece os seguintes
servicos:
• Controle de mudancas - responsavel por registrar as mudancas efetuadas no sistema. Para
isto existe o ticket, responsavel por conter os registros de defeitos, pedidos de melhorias
e tarefas do projeto.
36
• Wiki - permite a edicao coletiva do conteudo de um documento disponıvel na WEB. E
utilizado para a documentacao e referencia cruzada entre os elementos do TRAC.
• Integracao com o Subversion - funciona como um navegador do repositorio do SVN,
permitindo a visualizacao da estrutura de diretorios, logs de mudancas, diferencas entre
as revisoes, entre outros.
• Acompanhamento da evolucao do projeto - possibilita a obtencao de informacoes sobre a
evolucao do projeto. Estas informacoes sao disponibilizadas em diversas formas, dentre
elas: roadmap, timeline, RSS e relatorios.
Maiores informacoes podem ser encontradas em (TRAC, 2007).
3.3 PHP: HYPERTEXT PREPROCESSOR
Nesta secao serao apresentados os benefıcios que foram ganhos, devido a escolha da lin-
guagem de programacao PHP: Hypertext Preprocessor (PHP).
“PHP, que significa ‘PHP: Hypertext Preprocessor’, e uma linguagem de programacao de
ampla utilizacao[. . . ]”(ACHOUR et al., 2007). Atraves desta afirmacao e possıvel concluir que
a probabilidade de serem encontrados problemas durante a construcao do SGCI e muito pe-
quena. Isto acontece devido a linguagem estar sendo utilizada intensamente por varias pessoas,
e consequentemente, varios problemas ja foram detectados e resolvidos.
“A melhor coisa em usar PHP esta no fato de ele ser extremamente simples para um inici-
ante, mas oferece muitos recursos para o programador profissional.”(ACHOUR et al., 2007). A
facilidade de aprendizado da linguagem PHP e um consenso entre a maioria dos profissionais
da area.
O software a ser construıdo neste trabalho, tem como um dos requisitos funcionar de ma-
neira distribuıda (mais detalhes serao dados no decorrer do trabalho). Este e mais um motivo
para a escolha da linguagem PHP, pois esta e uma linguagem voltada para a WEB, onde todo
o processamento e feito no servidor, e o resultado enviado ao cliente, como demonstrado na
Figura 4.
“Apesar do desenvolvimento do PHP ser focado nos scripts do lado do servidor, voce pode
fazer muito mais com ele.”(ACHOUR et al., 2007).
Outro requisito para o software desenvolvido neste trabalho, e que o software devera ser
suportado pela maioria dos sistemas operacionais.
37
Figura 4: Funcionamento das paginas PHP.(ALVAREZ, 2005)
“O PHP pode ser utilizado na maioria dos sistemas operacionais, incluindo Li-nux, varias variantes Unix (incluindo HP-UX, Solaris e OpenBSD), MicrosoftWindows, Mac OS X, RISC OS, e provavelmente outros. O PHP tambem esuportado pela maioria dos servidores web atuais, incluindo Apache, Micro-soft Internet Information Server, Personal Web Server, Netscape and iPlanetServers, Oreilly Website Pro Server, Caudium, Xitami, OmniHTTPd, e muitosoutros.” (ACHOUR et al., 2007).
A diversidade de escolha de servidores, facilita a tarefa de deixar o software o mais robusto
e enxuto possıvel, sem perder a portabilidade.
“Com o PHP, portanto, voce tem a liberdade para escolher o sistema operacional e o ser-
vidor WEB. Do mesmo modo, voce pode escolher entre utilizar programacao estrutural ou
programacao orientada a objeto, ou ainda uma mistura deles.” (ACHOUR et al., 2007).
“O PHP tambem tem suporte para comunicacao com outros servicos utilizando protoco-
los como LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (em Windows) e incontaveis ou-
tros.”(ACHOUR et al., 2007). O suporte ao protocolo LDAP sera necessario para o desenvolvi-
mento do software deste trabalho.
Com tantos benefıcios, nao restaram duvidas na hora de optar por esta linguagem de programacao.
3.4 ZEND FRAMEWORK
Zend Framework e um framework de codigo aberto que prove recursos para desenvolver
programas utilizando PHP. “O framework foi construıdo baseando-se nas princıpios de simpli-
38
cidade, boas praticas de orientacao a objetos [. . . ] e testes rigorosos[. . . ]”(WHY. . . , 2007).
Este framework traz uma imensa biblioteca que fornece solucoes robustas e seguras para
trabalhar com desenvolvimento de aplicacoes voltadas para a WEB. As principais partes utili-
zadas desta biblioteca foram:
• Padrao de projeto Model-View-Control (MVC) (GAMMA et al., 1995) – Com este padrao
de projeto o sistema fica dividido em 3 camadas:
– Modelo (Model) – “O Modelo representa o domınio do conhecimento”(REENSKAUG,
2007), “contem todos os dados, estados e a logica da aplicacao”(FREEMAN et al.,
2004).
– Visualizacao (View) – Segundo Reenskaug (1979), a Visualizacao e a representacao
visual do modelo. Ela destaca certos atributos do modelo, e suprimem outros, atu-
ando como uma especie de filtro de apresentacao.
– Controlador (Controller) – Freeman et al. (2004) diz que o controlador e quem re-
cebe as entradas do usuario, transforma elas em mensagens apropriadas e repassa ao
modelo.
Segundo Reenskaug (2007), criador do padrao MVC, a parte mais difıcil de seu trabalho
foi dar bons nomes para os componentes do padrao.
• Abstracao do banco de dados – O framework e quem se preocupa com a comunicacao
com o banco de dados. Ele utiliza o padrao de projeto Adaptador (Adapter) (GAMMA
et al., 1995) para fazer o controle do banco de dados. Assim nao ha diferencas entra a
utilizacao de diferentes bancos de dados. Basta configurar o banco de dados na biblio-
teca, e utilizar as funcoes da biblioteca para fazer consultas. Se algum tempo depois, for
necessario trocar o banco de dados, basta alterar as configuracoes da biblioteca, e tudo
estara funcionando perfeitamente. Nenhuma linha do codigo da aplicacao precisara ser
alterada.
• Suporte a internacionalizacao – Com o processo de globalizacao, e necessario desenvol-
ver softwares que possam ser utilizados por varias culturas. Para este que sera proposto,
nao sera diferente.
39
3.5 OPENSSL
“OpenSSL e uma biblioteca de codigo aberto, que implementa as principais funcoes de
criptografia e os protocolos SSL e TLS”(OPENSSL, 200-). Esta biblioteca e uma das mais
robustas, conhecidas e utilizadas entre os desenvolvedores de software livre.
Ela pode ser dividida em 3 partes essenciais:
• Biblioteca SSL – A primeira parte da biblioteca, que implementa as funcoes basicas do
protocolo SSL.
• Biblioteca de Criptografia – A segunda parte implementa as funcoes de criptografia.
• Linha de Comando – Junto com a biblioteca existe um utilitario que, atraves da linha de
comando, possibilita a execucao de todas as funcoes da biblioteca.
Por esta biblioteca ser largamente utilizada na comunidade, foi a escolhida. Esta biblioteca
e quase como um “padrao” no desenvolvimento de softwares de seguranca.
3.6 PHPUNIT
O PHPUnit e um framework de codigo aberto, que auxilia na criacao e execucao automatica
de testes sobre classes PHP. Ele e um membro da famılia de frameworks de testes xUnit. Se-
gundo Bergmann (2007) os membros desta famılia proveem um frameworks para tornar o de-
senvolvimento de testes de unidade e a execucao destes, mais faceis, alem de poder analisar os
resultados. Eles foram baseados no projeto de Kent Beck. Segundo Beck (1995), o primeiro
membro foi o SUnit, implementado para Smalltalk, mas agora esta disponıvel para diversas
plataformas de desenvolvimento e diversas linguagens de programacao, tais como Java (JUnit),
C++ (CUnit) e PHP (PHPUnit).
Segundo Bergmann (2006), os principais benefıcios que o PHPUnit fornece sao:
• ambiente de testes reusavel;
• estrita separacao entre codigo produzido e codigo dos teste;
• execucao automatica dos codigos de testes;
• analise dos resultados;
40
• facil de aprender e utilizar.
Segundo Bergmann (2007), os principais usuarios do PHPUnit sao: Agavi, Creole, eZ
Components, PHP-GTK2, PHPUnit, Phing, Propel, Serendipity, Service Data Object (SDO) e
Zend Framework.
Como um dos requisitos do SGCI 2.0.0 e que o software deve ser autotestavel, foi utilizado
este framework para ajudar, e diminuir o trabalho de implementacao dos testes.
3.7 XDEBUG
XDebug e uma extensao de codigo aberto que ajuda na depuracao de aplicacoes PHP. Se-
gundo (XDEBUG. . . , 2007), a depuracao XDebug pode fornecer informacoes que inclui o se-
guinte:
• stack traces e function traces em mensagens de erro com:
– exibicao de todos os parametro para funcoes definidas pelo usuario
– nome da funcao, o nome do arquivo e indicacoes da linha
– suporte a funcoes membro
• alocacao de memoria;
• protecao contra recursoes infinitas.
41
4 EVOLUCAO DO SISTEMA
4.1 MELHORIAS EFETUADAS NA VERSAO 1.3.0
Nesta secao serao apresentadas as melhorias efetuadas na versao 1.3.0 do SGCI.
As principais funcionalidades adicionadas ao sistema foram:
• Suporte a HSM – O suporte a HSM aumenta a seguranca nas operacoes criptograficas
realizadas. Isto ocorre devido ao acesso a chaves privadas ser controlado por hardware.
Assim, as operacoes devem ser executadas pelo HSM. A confianca na seguranca e movida
para a confianca depositada no fabricante do HSM. O SGCI ainda oferece suporte para
trabalhar com diferentes HSMs ao mesmo tempo.
• Copia de seguranca (backup) – O suporte a copias de seguranca foi adicionado ao SGCI.
Se as chaves privadas das entidades, estiverem gravadas em disco (e nao em HSM), estas
sao colocadas junto com todos os outros dados do sistema na copia de seguranca. Nao
ha problema nisto, pois a copia de seguranca e cifrada. Uma vez cifrada, so pode ser
decifrada por pessoas autorizadas. Tambem foi adicionado suporte a restauracao da copia
de seguranca. Quando uma copia e restaurada, todos os dados do sistema sao substituıdos.
• Registro de eventos (logs) – Foi adicionado suporte ao registro dos eventos do sistema, e
a exportacao destes. Esta funcionalidade e muito util, e necessaria para auditoria de ICPs.
• Removido a comunicacao remota entre entidades – Foram removidos os acessos aos ar-
quivos do sistema remotamente. O SGCI versao 1.2.0 fazia chamadas remotas para auto-
matizar a comunicacao (enviar requisicoes e respostas) entre entidades que estivessem
em diferentes computadores. A maneira como esta automatizacao estava implemen-
tada, deixava margem para muitos ataques ao sistema. No SGCI versao 1.3.0 e 2.0.0,
as comunicacoes entre entidades serao todas manuais.
• Importacao de requisicoes – No SGCI versao 1.2.0, caso a comunicacao remota entre
as entidades falhasse, nao haveria como fazer a comunicacao de maneira manual. A
automatizacao das comunicacoes entre as entidades foi removida no SGCI versao 1.3.0.
42
Estes dois motivos causaram a necessidade de criar funcoes para importar manualmente
requisicoes e respostas as requisicoes. Foram adicionadas funcoes nas entidades do tipo
AC, para importar requisicoes de certificado e requisicoes de revogacao de certificados
e, alem disto, foram adicionadas funcoes de importacao de respostas de requisicoes nas
entidades do tipo AR.
• Plano de testes – Durante o estudo do SGCI 1.2.0, percebeu-se que nao havia uma
documentacao com o comportamento desejado das funcionalidades do sistema. Foi entao
criado um plano de testes, o qual serviu tanto para testar, quanto para descrever o compor-
tamento esperado das funcoes do sistema. O objetivo inicial destes testes foi encontrar o
maior numero de erros possıveis. Porem acabou servindo como uma documentacao sobre
as funcionalidades do SGCI 1.3.0.
O SGCI 1.3.0 possuıa alto acoplamento e baixa coesao1 entre as suas funcoes. Uma funcao
era modificada, e varias outras eram afetadas! Quando as ultimas funcionalidades foram adici-
onadas, perdeu-se mais tempo arrumando as partes do codigo fonte “afetadas”, do que imple-
mentando a nova funcionalidade.
Este foi um dos fatores fundamentais para iniciar o projeto de uma nova versao, sem reuti-
lizar a versao anterior.
4.2 ANALISE E PROJETO DA VERSAO 2.0.0
Abaixo e demonstrada a ultima etapa do trabalho: propor uma nova versao para o SGCI.
4.2.1 ANALISE DE REQUISITOS DO SGCI VERSAO 2.0.0
No decorrer dos estudos feitos sobre SGCI versao 1.3.0 , foi observado a necessidade das
funcionalidades que deveriam ser suportadas por um bom SGC. Algumas destas funcionalida-
des foram implementadas nesta mesma versao do sistema, como descritas na secao 4.1. Mas
para a implementacao de algumas funcionalidades, muito tempo teria de ser despendido. Um
exemplo disto seria o desenvolvimento de uma camada de persistencia do banco de dados para
melhorar a clareza e facilitar a manutencao do codigo. Outra funcionalidade que despenderia
muito tempo seria o suporte a autenticacao utilizando-se smart cards.
Atraves deste estudo, foi visto que a transferencia do codigo-fonte do sistema para instrucoes
de maquina nao traria benefıcios para o sistema, por exemplo, em relacao a seguranca. A1Os conceitos de acoplamento e coesao podem ser encontrados em (LARMAN, 2005)
43
solucao adotada foi a de reorganizacao da estrutura do sistema atual, a fim de melhorar a
seguranca e possibilitar a adicao das funcionalidades que nao sao suportadas pela versao 1.3.0.
Para tanto, foi desenvolvido um documento que define todos os requisitos para o SGCI
versao 2.0.0. Alguns destes requisitos sao os mesmos encontrados na versao 1.3.0, tais como:
• Utilizacao de software livre;
• Suporte a HSM;
• Suporte a backup;
• Suporte a exportacao de log.
Os outros foram adicionados com a experiencia adquirida nos estudos efetuados sobre o
SGCI 1.3.0. Sao alguns deles:
• Utilizar Programacao Orientada a Objetos (POO);
• Utilizar boas praticas de POO;
• Ser modular;
• Ser portavel;
• Ser robusto;
• Auditabilidade dos processos;
• Suporte a autenticacao com certificado digital;
• Suporte a dois modelos de transacao: requerente → ar → ac e requerente → ac;
• Possuir um script de instalacao e outro de inicializacao do sistema;
• Possuir um completo tratamento de erros;
• Testes automatizados;
• Possuir boa documentacao;
• Possuir um sistema de Ajuda (Help);
• Ter suporte a certificados EV SSL;
44
• Internacionalizacao do sistema.
Tambem foi desenvolvido um documento que consta uma possıvel estrutura para o sistema.
Este documento, assim como o documento de requisitos definidos para o SGCI versao 2.0.0,
podem ser encontrados no apendice B.
4.2.2 CASOS DE USO DO SGCI VERSAO 2.0.0
Utilizando como base os requisitos e as funcionalidades do SGCI 1.3.0, foram desenvol-
vidos os casos de uso do novo SGCI. Estes casos de uso podem ser encontrados no apendice
C.
Neste documento sao descritas as funcionalidades deste SGC. Ele e dividido em cinco
modulos:
• Casos de Uso do perfil Criador;
• Casos de Uso do perfil Administrador de AC;
• Casos de Uso do perfil Administrador de AR;
• Casos de Uso do perfil Operador de AC;
• Casos de Uso do perfil Operador de AR.
E o perfil de usuario Criador que cadastra e exclui ACs, ARs, administradores e HSMs,
alem de emitir relatorios sobre o sistema, gerenciar backups e efetuar a transferencia de base de
historicos.
Um usuario administrador de uma AC e responsavel pelos modelos de certificado e ex-
tensoes de certificados, pelo gerenciamento de relacoes de confianca e pelos Operadores. O ad-
ministrador de uma AR tem como responsabilidades o gerenciamento de relacoes de confianca
e o gerenciamento de operadores.
O operador de AC e responsavel por rejeitar requisicoes de certificados, emitir e revogar
certificados, gerar e publicar LCRs. O Operador de AR tem como responsabilidade a aprovacao
ou rejeicao de requisicoes alem de solicitar a revogacao de certificados.
Assim sendo, grande parte destes casos de uso descrevem o gerenciamento do ciclo de vida
de certificados digitais e o gerenciamento dos utilizadores deste sistema.
45
4.2.3 BIBLIOTECA DE SEGURANCA
O SGCI 2.0.0 possui um requisito muito importante, a maior modularidade possıvel para o
sistema. Para atender a este requisito, foi criado uma biblioteca para as funcoes de seguranca
(criptografia, manipulacao de certificados, etc). Os detalhes dessa biblioteca serao discutidos a
seguir.
REQUISITOS DA BIBLIOTECA
A biblioteca foi projetada tendo como requisitos:
• Utilizar POO;
• Utilizar boas praticas de POO;
• Ser o mais flexıvel possıvel (modularidade) – Qualquer parte da biblioteca podera ser
substituıda sem a necessidade de modificar o codigo do programa que utiliza a biblioteca;
• Robustez – A biblioteca deve tratar todas as possıveis excecoes, e funcionar sobre as
piores condicoes possıveis;
• Seguir as recomendacoes da RFC3280(HOUSLEY et al., 2002) e da RFC4210(ADAMS
et al., 2005);
• Testes automatizados – A biblioteca deve possuir testes automaticos, para todas as suas
funcionalidades;
• Documentacao – A biblioteca deve estar totalmente documentada (requisitos, casos de
uso, codigo-fonte, diagrama de classes, etc).
Segundo Meyer (1997), a programacao orientada a objetos foi desenvolvida apos a crise
de software (ocorrido durante as decadas de 60 e 70), para aumentar a qualidade e diminuir a
complexidade dos programas, enfatizando a modularidade e a reusabilidade de software.
Atraves das boas praticas de programacao, consegue-se:
• Aumentar a legibilidade do codigo – O codigo fica mais limpo e organizado;
• Baixo acoplamento entre as partes do programa – Cada parte comunica-se o mınimo
possıvel para realizar sua tarefa, ficando independente das outras partes;
46
• Alta coesao entre os componente do programa – Cada componente e especializado em
executar a sua funcao;
• Vasta documentacao – A documentacao e essencial para quem vai fazer a manutencao do
sistema;
• Facilidade de manutencao do programa – Com o codigo organizado, documentado, com
baixo acoplamento e alta coesao, ganha-se facilidade na manutencao do programa.
Benefıcios em utilizar essa biblioteca no SGCI:
• Facilidade da manutencao;
• Como a biblioteca e totalmente modularizada, e facil estende-la para adicionar novas
funcionalidades;
• Total controle sobre uma AC, o controle nao e feito pelo OpenSSL como na versao 1.3.0;
• A biblioteca foi implementada segundo a padronizacao definida na RFC3280(HOUSLEY
et al., 2002) e RFC4210(CHOWDHURY; YEGANI; MADOUR, 2005);
• Foram criadas fachadas para facilitar comunicacao entre o SGCI e a biblioteca.
PROJETO E DESENVOLVIMENTO DA BIBLIOTECA
Apos os casos de uso do SGCI definidos, foi dado inıcio ao projeto da biblioteca. Inicial-
mente a biblioteca foi desenvolvida em apenas um diagrama de classes, porem com o tempo o
diagrama aumentou demasiadamente. Para facilitar a visualizacao, este diagrama foi divido em
tres modulos:
1. Certificacao – Funcoes relacionadas com certificados digitais;
2. Criptografia – Funcoes relacionadas com criptografia;
3. Utilidades – As funcoes que nao puderam ser categorizadas nos dois modulos anteriores.
MODULO DE CERTIFICACAO DIGITAL Como ja explicitado anteriormente, este
modulo e o responsavel pelas funcoes relacionadas com certificados digitais. Este modulo foi
separado em grupos, conforme descrito na Tabela 1.
47
Grupo FuncaoCertificado Manipulacao de certificados digitais
Lista de Certificados Revogados Manipulacao de LCRsExtensoes Extensoes de certificados e LCRs
Requisicoes de Certificado Criacao de requisicoes de certificadosPadroes de Certificados Modelos de certificados, com alguns campos pre-definidos
Identificadores de Objetos Atribuicao dos identificadores padroes dos objetosRDNSequence Tipo RDNSequence da RFC3280(HOUSLEY et al., 2002)
Tabela 1: Agrupamento das classes do Modulo de Certificacao Digital
A Figura 5 apresenta o relacionamento entre os grupos. As linhas contınuas representam
um relacionamento obrigatorio, enquanto que as linhas tracejadas representam um relaciona-
mento nao obrigatorio. O diagrama considera os relacionamentos em tempo de execucao. Por
exemplo, um certificado pode ou nao conter extensoes. Se ele tiver, havera uma relacao entre
os grupos Certificado e Extensoes.
Figura 5: Relacionamento entre os grupos do Modulo de Certificacao Digital da biblioteca
O ciclo de vida de um certificado digital inicia pela requisicao de certificado, normalmente
efetuado pelo usuario. Vamos partir deste ponto para falar sobre a biblioteca.
Uma requisicao de certificado no SGCI e um arquivo em formato PKCS #10(Rsa Labora-
tories, 2000), contendo:
• Os dados do sujeito com os campos que serao preenchidos no certificado (nome comum,
organizacao, cidade, etc.);
• A chave publica do sujeito;
• As extensoes que serao adicionadas ao certificado;
48
• A funcao resumo dos itens anteriores, assinada com a chave privada do sujeito
A figura 6 demonstra uma requisicao de certificado. Nela e possıvel ver o processo de
assinatura da requisicao. Primeiro e calculado a funcao resumo da uniao dos dados do sujeito,
da chave publica e das extensoes. Essa funcao e cifrada utilizando a chave privada do sujeito, e
anexada a requisicao.
Figura 6: Requisicao de Certificado
Para verificar a autenticidade, primeiro e calculado a funcao resumo da requisicao (sem a
assinatura final), depois se utiliza a chave publica contida na requisicao para decifrar a funcao
resumo que esta na requisicao. Comparam-se os dois resultados, se forem iguais, a requisicao
nao foi alterada e a chave publica e a correspondente da privada. Atraves deste processo tambem
e comprovado que o sujeito possui acesso a chave privada.
Para criar uma requisicao de certificado na biblioteca, utiliza-se o padrao de projeto Builder
(GAMMA et al., 1995). Primeiro sao setados os valores dos campos que serao preenchidos no
certificado, depois adicionadas as extensoes, e por ultimo a requisicao e assinada.
A Figura 7 apresenta o diagrama de classes do grupo Requisicoes de Certificado. No dia-
grama, pode-se verificar que ha duas interfaces:
• CertificateRequest – Responsavel pelas requisicoes de certificados.
• CertificateRequestBuilder – Padrao de projeto Builder, utilizado para criar requisicoes de
certificado.
Figura 7: Diagrama de Classes do grupo Requisicoes de Certificado
49
Do ponto de vista do programador, para se criar uma requisicao, primeiro sao definidos
os dados da requisicao atraves dos metodos sets. Depois e chamado o metodo sign com os
parametros:
• privateKey – A chave privada para assinar a requisicao. A chave privada do requerente
do certificado.
• hashAlgorithm – O algoritmo que sera utilizado para calcular a funcao resumo do certi-
ficado. Pode ser MD2, MD4, MD5, SHA, SHA1, SHA224, SHA256, SHA384, SHA512,
RIPEMD160.
• extraArgs – Este parametro foi criado para caso seja necessario adicionar mais algum
parametro. Atualmente nao esta em uso.
O metodo sign retorna um objeto do tipo CertificateRequest, que representa uma requisicao
de certificado digital.
O proximo passo e enviar esta requisicao a uma entidade, que ira inspecionar a requisicao
e depois emitir o certificado. Para esta etapa, existem dois modelos comumente utilizados:
• Modelo de transacao de duas partes (Figura 8) – A requisicao e enviada a uma Autoridade
Certificadora, esta confere a requisicao e depois emite o certificado
• Modelo de transacao de tres partes (Figura 9) – Neste modelo, a requisicao pode ser
gerada pelo sujeito ou pela propria AR. Se a requisicao for gerada pelo sujeito, a AR
confere os dados da requisicao (podendo esta requerer comprovacao da identidade do
sujeito). No caso da AR ser a geradora da requisicao, e comum haver a necessidade do
requerente se apresentar pessoalmente. Apos a requisicao gerada e aprovada pela AR,
esta assina digitalmente a requisicao e envia a Autoridade Certificadora. A AC emite o
certificado e envia uma resposta de confirmacao para a AR. A AR notifica o sujeito que o
seu certificado esta pronto (na notificacao pode constar o certificado). Quando emitido, o
certificado normalmente e publicado em um diretorio publico.
UsuárioAutoridade
Certif icadora
Requisição de certif icado
Certif icado assinado
Figura 8: Modelo de transacao de duas partes (VIGIL, 2007)
50
Usuário AR AC
Apresenta-se pessoalmente: solicita um certif icado
Requisição assinada
Resposta assianda
Certif icado
Figura 9: Modelo de transacao de tres partes (VIGIL, 2007)
Nesta fase do ciclo de vida do certificado, a biblioteca e utilizada apenas na assinatura da
requisicao. Isto e feito utilizando-se o modulo de criptografia da biblioteca (mais informacoes
ver na pagina 59).
No SGCI, toda a comunicacao entre as entidades sera feito de acordo com a RFC4210(ADAMS
et al., 2005), a qual estabelece certas estruturas. Como nao existe um formato padrao (como
por exemplo PKCS#10 para requisicao de certificados), este formato foi simulado utilizando-se
arquivos Extensible Markup Language (XML) (W3C, 2007).
Quando a requisicao e entrega a AC, e hora de emitir o certificado. Uma AC ao emitir
um certificado, pode adicionar ou remover campos da requisicao. Por exemplo, uma AC pode
pegar uma requisicao, adicionar algumas extensoes e depois emitir o certificado. Tambem pode
substituir algum dos campos da requisicao se quiser. Estes procedimentos normalmente estao
descritos na DPC da AC.
Veja um exemplo pratico. Segundo AGP (2007), na ICPEDU inteira, os certificados deverao
conter os valores nos seguintes campos:
• Emissor e Titular. Cada um deles com os seguintes campos:
– C = Sigla “BR”;
– O = ICPEDU;
• Extensao Certificate Policies:
– userNotice = “Os certificados da ICPEDU sao para uso exclusivo por instituicoes
brasileiras de ensino e pesquisa, e nao tem eficacia juridica.”
Para estes campos com valores fixos, poderia ser criado um modelo de certificado, e estes
so precisariam ser digitados uma vez.
A biblioteca prove suporte a combinacoes de todas as opcoes explicadas anteriormente.
Para criar um certificado utiliza-se, como na requisicao de certificado, o padrao de projeto
51
Builder. Inicialmente setam-se os valores dos campos, apos se adicionam as extensoes, e por
ultimo o certificado e assinado com a chave privada da entidade emissora do certificado.
Se houver uma requisicao, os dados dos campos da requisicao sao passados para o Buil-
der do certificado. Depois a AC emissora adiciona extensoes ou altera campos, conforme ne-
cessario. E por ultimo, o certificado e emitido.
Primeiro sera explicado como funciona a leitura de um certificado existente, e depois sera
explicado como criar um certificado utilizando-se o padrao de projeto Builder.
O grupo Certificado e formato por duas interfaces: Certificate e CertificateBuilder. A pri-
meira interface representa um certificado e possui no seu construtor dois parametros (o segundo
parametro e opcional). O primeiro parametro, data, sao os dados de um arquivo. O segundo
parametro e o formato do arquivo do certificado (PEM ou DER). Se o segundo parametro nao
for especificado, e utilizado como padrao o formato PEM. A classe pega os dados, le eles no
formato especificado, e seta os atributos. Depois, os dados do certificado podem ser acessados
atraves dos metodos gets.
Figura 10: Diagrama de Classes do grupo Certificado
Para criar um novo certificado, utiliza-se a classe CertificateBuilder, a qual utilizada o
padrao de projeto Builder. Primeiro entra-se com os dados do novo certificado, atraves dos
metodos sets. As extensoes do certificados sao adicionadas uma a uma utilizando o metodo
addExtension. Tambem podem ser adicionadas multiplas extensoes atraves do metodo addEx-
tensions.
Apos os dados do certificado serem setados, utiliza-se o metodo sign para assinar o certifi-
cado. Este metodo precisa dos seguintes parametros:
• privateKey – A chave privada para assinar o certificado. Normalmente a chave privada de
uma AC.
52
Posicao Funcao0 digitalSignature1 nonRepudiation2 keyEncipherment3 dataEncipherment4 keyAgreement5 keyCertSign6 cRLSign7 encipherOnly8 decipherOnly
Tabela 2: Nomenclatura dos bits do valor da extensao Key Usage
• hashAlgorithm – O algoritmo que sera utilizado para calcular a funcao resumo do certifi-
cado.
• template – Este e um parametro opcional. Pode ser passado um objeto do grupo Padroes
de Certificados. (O funcionamento destes modelos de certificados, serao detalhados a
diante).
• extraArgs – Este parametro, tambem opcional, foi criado para caso necessario adicionar
mais algum parametro. Atualmente nao esta em uso.
O metodo sign retorna um objeto do tipo Certificate (um certificado digital).
A classe CertificateBuilder possui um construtor com um parametro opcional, o request.
Este parametro e uma requisicao de certificado. Caso este parametro for especificado, os dados
do certificado sao extraıdos automaticamente da requisicao.
Os certificados digitais X.509 versao 3 possuem extensoes. Existem extensoes padroes
(propostas na RFC3280), e as nao padroes (criadas por empresas para uma determinada fina-
lidade, por exemplo). A biblioteca deve oferecer suporte para identificar ambos tipos de ex-
tensoes. Uma extensao e basicamente um par (chave, valor). Porem, este valor pode representar
uma estrutura composta.
Para exemplificar uma extensao, sera analisado a extensao Key Usage. Esta extensao define
quais serao as finalidades de utilizacao da chave privada do sujeito.Ela e composta por um
identificador, 2.5.29.15, e um valor. O valor e formado por 9 bits. Cada bit significa uma
utilizacao diferente da chave privada. Se o bit estiver setado em 1 quer dizer que a chave e
utilizada para aquela finalidade, se o bit estiver setado em 0 a chave nao e utilizada para aquele
fim. A Tabela 2 mostra a nomenclatura de cada posicao na cadeia de bits.
Por exemplo, se a chave publica de uma AC for utilizada apenas para emitir certificados e
53
LCRs, no certificado desta AC, a extensao Key Usage tera o valor binario: 0011000002. Aonde
os bits 5 e 6 representam respectivamente assinatura de certificados digitais e de LCRs.
A extensao Key Usage e o exemplo de uma extensao “atomica”. Existem extensoes com-
postas, como a Authority Key Identifier. O valor da extensao Authority Key Identifier e composto
por 3 campos:
• keyIdentifier - Este campo e formato pela resultado da funcao resumo da chave publica
da autoridade emissora do certificado, e identifica qual chave publica, correspondente da
chave privada da autoridade emissora do certificado, foi utilizada.
• authorityCertIssuer - Esta campo e formato por uma estrutura denominada GeneralNames
(esta estrutura sera explicada no decorrer do trabalho), e identifica o emissor do certificado
da autoridade emissora do certificado. Ou seja, o emissor do emissor do certificado.
• authorityCertSerialNumber - Este campo e um valor numerico inteiro, e identifica o
numero serial do certificado da autoridade emissora do certificado.
A figura 11 demonstra como e formado a extensao Authority Key Identifier.
Figura 11: Extensao Authority Key Identifier (SUTIL, 2007)
Anteriormente foi dito que todas as extensoes poderiam ser resumidas ao formato de um par
(chave, valor). Na extensao Authority Key Identifier nao e diferente. Os tres campos explicitados
acima, podem ser representados por uma sequencia de bits. Entao se a extensao Authority Key
Identifier for desconhecida para uma entidade, essa pode afirmar que a extensao e formada por
um par (chave, valor). Porem, esta entidade nao consegue identificar o que significa aquele
valor.
As extensoes propostas na RFC3280 foram modeladas na biblioteca, seguindo a norma.
Esta fora do escopo deste trabalho explicar como as extensoes sao formadas, ate porque cada
2A representacao binaria e feita contando-se da direita para a esquerda.
54
extensao possui uma estrutura propria. Portanto, para utilizar a biblioteca e necessario um
previo conhecimento da formacao das extensoes.
Nas Figuras 12, 13 e 14, e apresentado o diagrama de classes do grupo Extensoes. A Figura
12 apresenta a classe Extension e varias outras interfaces, cada uma dessa interfaces representa
cada uma das extensoes propostas pela RFC3280. Pode-se perceber que cada extensao possui
atributos e metodo diferentes, devido a cada uma possuir estruturas diferentes.
A biblioteca tambem nao faz distincao entre extensoes de LCR, e extensoes de certificado.
Embora nao encoraje, a RFC tambem nao proıbe a utilizacao de extensoes de LCR em certifi-
cados, e vice-versa.
Excluindo as interfaces CRLDistribuitonPoint, CertificatePoliciesExtension e Authority-
KeyIdentifierExtension, todas as interfaces utilizam apenas tipos basicos. Para manipular essas
classes, basta conhecer a estrutura de cada extensao (definidas na RFC3280). Como aquelas tres
interfaces estao relacionadas com outras interfaces, serao explicadas detalhadamente a seguir.
A extensao Authority Key Identifier, segundo a RFC3280, possui um campo chamado autho-
rityCertIssuer. Este campo e do tipo GeneralNames. Este, por sua vez e uma sequencia de no
mınimo um GeneralName. Estes dois ultimos tipos sao representados pelas classes GeneralNa-
mes e GeneralName respectivamente, mostradas na Figura 13.
Um GeneralName pode ser de varios tipos. Cada tipo possui as suas regras. Por exemplo
o tipo RFC822Name e utilizado para enderecos de e-mail, ja o tipo UniformResourceIdentifier
e utilizado para enderecos de site WEB, o tipo IPAddres e utilizado para representar enderecos
Internet Protocol (IP) versao 4 ou 6. Cada tipo possui uma estrutura em particular. Como esta
parte da biblioteca segue fielmente a RFC3280, e necessario o conhecimento da mesma, para
poder escolher qual o tipo correto de GeneralName a ser utilizado.
A extensao CRL Distribution Point, segundo a RFC3280, e composta por no mınimo um
DistributionPoint. A classe DistributionPoint representa este tipo.
A extensao Certificate Policies e uma lista de PolicyInformation, que por sua vez e cons-
tituıda de um identificador (policyIdentifier) e uma lista. Esta lista e chamada de policyQualifi-
ers. Esta e composta por PolicyQualifierInfo, composto de um identificador (policyQualifierId)
e Qualifiers. Um Qualifier pode ser um CPSUri ou um userNotice. Um CPSUri geralmente
representa uma Uniform Resource Locator (URL), enquanto que um userNotice representa um
texto. Cada tipo e representado na biblioteca por classes que recebem a respectiva nomencla-
tura. Esta extensao e uma composicao complexa, porem na pratica normalmente e utilizada em
casos simples, como indicar a URL (CPSUri) da PC, ou adicionar um pequeno texto (userNo-
55
tice) no certificado.
Alguns tipos padronizados de certificados sao emitidos o tempo inteiro. Para nao ser ne-
cessario ficar especificando os atributos desses certificados toda vez que eles forem emitidos,
criou-se os modelos de certificados. Na ICPEDU, por exemplo, todos os certificados deverao
possuir o seguinte userNotice: “Os certificados da ICPEDU sao para uso exclusivo por institui-
coes brasileiras de ensino e pesquisa, e nao tem eficacia juridica.”. Alem disso, os certificados
de ACs intermediarias deverao ter um perıodo de validade e tamanho de chaves especıficas.
Tambem devera haver na extensao Basic Constraints, o campo CA com valor TRUE.
Estes modelos poderao substituir os valores que estao numa requisicao de Certificado. Ima-
gine que uma certa ICP define que o campo Organization devera conter: “ICP XYZ”. Os re-
querentes nao precisam digitar o campo Organization, quando o certificado for emitido, sera
aplicado o modelo e o campo Organization sera preenchido. Se o requerente preencher o campo
Organization, este podera ser substituıdo ou nao. Esta opcao fica a cargo do usuario.
Para criar um modelo de certificado, basta instanciar um objeto de alguma classe que im-
plemente a interface CertificateTemplates. Depois disto, e so utilizar os metodos da interface,
para setar os valores do modelo. Se necessario faz-se a persistencia do objeto, para no futuro
poder carrega-lo e utiliza-lo novamente.
Apos o modelo ser criado, para aplicar este, basta passar o modelo como parametro para o
metodo sign da interface CertificateBuilder. A interface CertificateTemplate e apresentada na
figura 15
Agora sera explicado como funcionam as LCRs na biblioteca. Segundo Housley e Polk
(2001), uma LCR pode ser definida como uma ferramenta basica de ICP, utilizada para distribuir
informacoes sobre o estado dos certificados. Uma LCR e uma lista com a identificacao dos
certificados revogados.
Uma LCR pode possuir extensoes, assim como cada uma de suas entradas tambem podem
conter. As extensoes, tanto para LCR quando para as suas entradas, funcionam da mesma
maneira que para certificados.
Para criar um LCR utiliza-se novamente o padrao de projeto Builder. Seta-se os valores e
depois se chama o metodo criador do objeto. O Builder entao retorna uma LCR assinada.
Na biblioteca, o builder e implementado atraves da interface CertificateRevogationListBuil-
der (ver figura16), e o metodo criador e o sign. Este metodo possui os parametros:
• privKey (obrigatorio) – A chave privada da entidade que vai assinar a LCR.
56
Figu
ra12
:Dia
gram
ade
Cla
sses
dogr
upo
Ext
enso
es-P
arte
1
57
Figura 13: Diagrama de Classes do grupo Extensoes - Parte 2
• hashAlgorithm (obrigatorio) – Qual funcao resumo sera utilizado para assinar a LCR.
• extraArgs (opcional) – Argumentos extras. Este parametro nao esta em uso.
Um metodo importante do builder de LCR e o addCRLEntry, o qual adiciona entradas na
LCR. Estas entradas sao representadas pela interface CRLEntry. Esta ultima, de acordo com a
RFC3280, possui um numero serial, uma data de revogacao e extensoes.
Apos criar uma LCR, o builder retorna um objeto to tipo CertificateRevocationList. As
informacoes da LCR podem ser obtidas a partir de metodos gets. O metodo isRevoked procura
o certificado passado como parametro na LCR, e retorna TRUE caso o certificado esteja na LCR
e FALSE caso nao esteja.
Um Object Identifier (OID) e um identificador utilizado para indicar um objeto. Um certifi-
cado e composto por varios objetos (algoritmos de funcoes resumo, extensoes, tipos de polıticas,
etc).
Como pode ser observado nos diagramas de classes dos grupos anteriores, a maioria possui
um OID. Os OIDs na biblioteca sao criados utilizando o padrao de projeto Factory(GAMMA et
al., 1995). Para se obter um OID, e enviado o codigo do OID, e a classe ObjectIdentifierFactory
retorna o objeto ObjectIdentifier correspondente. Tambem foram criados codigos proprios da
biblioteca, para facilitar. Os OIDs comuns possuem um codigo interno (acessados atraves de
58
Figura 14: Diagrama de Classes do grupo Extensoes - Parte 3
Figura 15: Diagrama de Classes do grupo Padroes de Certificados
constantes de classe).
Internamente quando e solicitado um OID a classe ObjectIdentifierFactory, ela constroi um
objeto do tipo ObjectIdentifier. Este objeto, depois de criado, nao pode ser mais modificado,
somente pode ser lido o seu valor atraves do metodo getOID.
A RFC3280 estabelece que alguns campos do certificado (e tambem das extensoes), sao
de um tipo denominado RDNSequence. Um RDNSequence e uma seqencia de RelativeDis-
tinguishedName. Um RelativeDistinguishedName por sua vez e uma seqencia de pares (tipo,
valor). Um RelativeDistinguishedName, e representado na biblioteca pela classe RDNSequence
(ver figura 17). A classe, como na RFC3280, e formada por uma seqencia de pares (type, value),
que sao os parametros utilizados no metodo addEntry. Este metodo e utilizado para construir
um RelativeDistinguishedName.
O tipo RelativeDistinguishedName, e utilizado quando e necessario identificar uma enti-
dade, como acontece com o campo emissor de um certificado digital.
59
Figura 16: Diagrama de Classes do grupo Lista de Certificados Revogados
Figura 17: Diagrama de Classes dos grupos Identificadores de Objetos e RDNSequence
Os tipos mais comuns do par (tipo, valor) do RelativeDistinguishedName sao:
• CommonName – O nome comum do sujeito;
• Organization – A organizacao a qual o sujeito pertence;
• OrganizationUnit – A unidade da organizacao a qual o sujeito pertence;
• Country – O paıs do sujeito;
• DistinguishedNameQualifier – O nome distinto do sujeito;
• State – A unidade federativa do sujeito.
MODULO DE CRIPTOGRAFIA Este modulo da biblioteca e responsavel por todo o
processo criptografico utilizando, ou nao, uma engine. As classes tratam as funcionalidades de
60
Grupo FuncaoEngine Comunicar-se com HSMs
Funcao Resumo Gerar a funcao resumo de um dadoChave Simetrica Criacao de chaves simetricas
Chave Assimetrica Chaves privadas e chaves publicasPar de Chaves Criacao de pares de chaves
Cifrador Cifrar e decifrar dadosAssinador Assinar dados
Tabela 3: Agrupamento das classes do Modulo de Criptografia
pares de chaves (chave privada e sua respectiva chave publica) RSA ou DSA, chaves simetricas,
funcoes de resumo, assinatura de dados, cifragem e decifragem simetrica de dados alem de
cifragem e decifragem assimetrica de dados. Este modulo foi separado em grupos, conforme
descrito na Tabela 3.
Como definido para o SGCI versao 1.3.0, o SGCI versao 2.0.0 tera suporte a HSM para
aumentar o seguranca nas operacoes criptograficas. Segundo RNP et al. (2004b) HSM e um
dispositivo de processamento criptografico e gestao de chaves criptograficas que mantem con-
formidade com normas de construcao de hardware, levando em consideracao os mais diversos
ataques aos processos criptograficos que ele protege, e assim garantido a sua seguranca e a
salva-guarda de parametros crıticos de seguranca por ele protegidos.
“A chave privada nunca aparece em claro fora do HSM e toda transacao queexija que ela seja usada e realizada no interior do ambiente de alta segurancapor ele provido. No caso de uma AC, a funcao usual de um HSM e servir como’cofre’ para a chave privada. Nao ha como acessa-lo, a nao ser pelas interfacespadrao de solicitacao de execucao de suas funcoes criptograficas basicas. OHSM tambem serve como acelerador criptografico, podendo chegar a realizarcentenas de assinaturas por segundo com a chave privada que protege.” (RNPet al., 2004a).
O grupo Engine (Figura 18) e composto por uma interface: Engine, responsavel pela
comunicacao com HSMs. O construtor desta classe recebe dois parametros: enginePath e en-
gineId. O primeiro deve ser o endereco do arquivo do cliente da engine. O segundo deve ser o
identificador desta engine.
Figura 18: Diagrama de Classes das interfaces do grupo Engine
61
Um comando de uma engine e um par (chave, valor), sendo chave o nome do comando e
valor e a atribuicao deste comando. Para passar comandos a engine, deve-se utilizar o metodo
addCommand passando como parametro a chave e o seu respectivo valor. Se o comando ja
existir, o valor do comando e substituıdo, senao o comando e adicionado ao final da lista de
comandos.
Para realizar um teste de conexao, deve-se utilizar o metodo init. Depois de realizada a
verificacao se o HSM esta respondendo, e retornado TRUE se a conexao for estabelecida, e
FALSE caso houver algum problema.
A biblioteca pode ser utilizada para calcular a impressao digital de um dado, ou seja, a
funcao resumo deste dado (mais informacoes ver na secao 2.3). Dentro desta biblioteca, a
funcao resumo de um dado somente sera utilizada pelo grupo Assinador descrito na pagina 65.
O grupo Funcao Resumo (Figura 19) e composto por uma interface: MessageDigest. Ela
utiliza o padrao de projeto State (GAMMA et al., 1995) e e responsavel por calcular a funcao
resumo de um determinado dado. O procedimento para calcular a funcao resumo sempre sera a
seguinte execucao ordenada:
• init – passando como parametro o nome do algoritmo que sera utilizado. Este metodo
inicializa as estruturas que serao utilizadas.
• update – passando como parametro o dado a ser utilizado no calculo. Este metodo ar-
mazena o dado que sera utilizado. Ele pode ser chamado varias vezes, sendo que a cada
chamada do metodo, o dado ja armazenado sera concatenado com o dado passado como
parametro.
• doFinal – este metodo possui um parametro opcional. Caso ele receba algum parametro,
ele concatenara o parametro com o dado ja armazenado, como faz o metodo update,
efetuara o calculo da funcao resumo e o retornara. Caso nenhum parametro seja recebido,
ele efetuara o calculo da funcao resumo com o dado armazenado pela funcao chamada
anteriormente, e retornara o resultado.
Figura 19: Diagrama de Classes das interfaces do grupo Funcao Resumo
Devido ao padrao de projeto utilizado, sempre deve-se executar os metodos na seguinte
62
sequencia: init → update → doFinal, sendo que update pode ser chamado diversas vezes. Se
alguma outra seqencia for utilizada, serao gerados erros.
Para que um determinado usuario possa cifrar um documento simetricamente, ele deve
primeiro, possuir uma chave simetrica (maiores detalhes na secao 2.2.1.
A parte da biblioteca que gerencia chaves simetricas esta definida no grupo Chave Simetrica
(Figura 20), composto por uma interface: SymmetricKey. Ela e responsavel pela criacao e
gerenciamento de chaves criptograficas simetricas. Ha dois modos de possuir um objeto de
SymmetricKey.
Figura 20: Diagrama de Classes das interfaces do grupo Chave Simetrica
A primeira e utilizada quando o programador pretende gerar uma nova chave simetrica.
Deve-se invocar o metodo generateSymmetricKey passando, opcionalmente, o tamanho da chave,
que por padrao e 1024, e o algoritmo que sera utilizado, que por padrao e o 3DES. A biblioteca
fara as suas verificacoes, ira gerar uma chave simetrica e ira setar os atributos desta classe.
A segunda opcao e utilizada quando o programador ja possuir uma chave simetrica e deseja
utiliza-la na biblioteca. Ele deve passar como parametro do metodo loadKey a chave propria-
mente dita e, opcionalmente, o tamanho da chave, que por padrao e 1024, e o algoritmo que
sera utilizado, que por padrao e o 3DES. A biblioteca faz as suas verificacoes e seta os atributos
da classe SymmetricKey.
Para que um sujeito possa gerar uma assinatura digital, deve primeiramente possuir uma
par de chaves assimetricas, formado pela sua chave privada e chave publica. O par de chaves e
calculado simultaneamente. Maiores informacoes sobre chaves assimetricas, verifique a secao
2.2.2.
O grupo Par de Chaves (Figura 21) e composto por duas interfaces: KeyPairBuiler e Key-
Pair. O primeiro, atraves do padrao de projeto Builder, constroi um objeto KeyPair. Seu cons-
trutor recebe como parametro o tipo da chave que sera gerada, sendo suportado pela biblioteca
a geracao de chaves RSA e DSA. A classe KeyPairBuiler possui tambem metodos sets para
poder definir o tamanho da chave que sera gerada, o cifrador que sera utilizado e a senha para a
cifragem, alm de poder setar uma Engine, caso seja utilizada.
O metodo getKeyPair possui o parametro opcional extraArgs, criado para ser utilizado caso
63
seja necessario futuramente. Ele e responsavel por gerar um par de chaves com os parametros
definidos pelos metodos sets, construir um objeto KeyPair com as chaves geradas e retornar este
objeto KeyPair.
Figura 21: Diagrama de Classes das interfaces do grupo Par de Chaves
A segunda classe (KeyPair) e responsavel pelo par de chaves propriamente dito. Ela possui
dois metodos gets: getPublicKey e getPrivateKey, quem retornam respectivamente a sua chave
publica, um objeto da classe PublicKey, e a sua chave privada, um objeto da classe PrivateKey,
pertencentes ao grupo Chave Assimetrica.
Caso o programador j possuir uma chave privada, deve utilizar o mtodo esttico loadKeyPair
passando como parmetro a chave privada no formato PEM e a sua senha, caso ela exista. Este
mtodo far as suas verificaes e retornar um objeto KeyPair.
Apos a geracao do par de chaves utilizando KeyPairBuiler, e possıvel utilizar estas chaves
para assinar e cifrar documentos utilizando respectivamente as classes Signer e Assymmetric-
Cipher,que serao explicitadas ao decorrer do trabalho. Para isto, o programador deve utilizar os
metodos de KeyPair para retornar objetos de PrivateKey e PublicKey.
O grupo Chave Assimetrica (Figura 22) e composto pela classe abstrata
• AssymmetricKey – responsavel pelo gerenciamento de itens comuns entre as seguintes
classes que a extende:
– PrivateKey – responsavel pelo gerenciamento de chaves privadas
– PublicKey – responsavel pelo gerenciamento de chaves publicas
AssymmetricKey implementa mtodos gets que retornam informaes sobre a chave tais como:
o algoritmo utilizado, o formato em que ela se encontra (DER ou PEM) e o tamanho da chave,
alm de retornar a chave no formato PEM e no formato DER.
64
Figura 22: Diagrama de Classes das interfaces do grupo Chave Assimetrica
O construtor de PrivateKey deve somente ser utilizado caso o programador j possuir uma
chave privada e no queira possuir a sua chave pblica ou quando ele deseje possuir somente um
objeto desta classe que represente a chave privada de uma Engine . Caso ele queira possuir
o par de chaves, deve-se invocar o mtodo loadKeyPair, de KeyPair, descrito anteriormente. O
construtor possui os seguintes parmetros:
• key – a chave.
• passwd – opcional com valor padro nulo. a senha que foi utilizada na cifragem da chave.
• format – opcional com valor padro PEM. O formato em que se encontra a chave.
• hsm – opcional com valor padro nulo. A Engine que foi utilizada.
• keyName – opcional com valor padro nulo. O identificador da chave utilizada.
Esta classe possui ainda um mtodo para retornar a chave privada cifrada (getEncryptedPemEn-
coded), outro que verifica se a chave privada est em Engine (useEngine), alm de dois mtodos
gets que retornam, caso foi utilizado, a Engine que armazena a chave e o identificador desta
chave.
A classe PublicKey possui, alm dos mtodos de AssymmetricKey, somente um construtor que
recebe a chave e o formato em que se encontra. Este mtodo deve somente ser utilizado caso o
65
programador s possuir a chave pblica, como em um certificado digital. Caso ele possua tambm
a chave privada, deve ser utilizado o mtodo loadKeyPair, de KeyPair, descrito anteriormente.
O programador e encorajado a utilizar um objeto KeyPair e nao somente um de PrivateKey
ou PublicKey. Por exemplo: caso o programador deseje cifrar um dado com uma chave RSA
ele deve utilizar a classe KeyPairBuilder para construir um objeto KeyPair com os parametros
desejados. A partir deste objeto ele deve invocar o metodo getPublicKey que retornara a chave
publica gerada, objeto de PublicKey. E, a partir do grupo Cifrador, definido a seguir, ele podera
cifrar um dado com a chave publica RSA que ele possui.
Um dos princıpios basicos da criptografia e a cifragem de dados. Os dados podem ser
cifrados com chaves simetricas ou com chaves assimetricas. Mais detalhes vide secoes 2.2,
2.2.1 e 2.2.2.
A biblioteca implementa funcoes de cifragem no grupo Cifrador (Figura 23), composto por
duas interfaces: AssymmetricCipher e SymmetricCipher.
Figura 23: Diagrama de Classes das interfaces do grupo Cifrador
AssymmetricCipher e responsavel pela cifragem assimetrica de dados e SymmetricCipher,
pela cifragem simetrica de dados. Estas classes possuiem, cada uma delas, dois metodos: en-
crypt e decrypt, responsaveis por cifrar e decifrar um dado, respectivamente.
Em AssymmetricCipher, o mtodo encrypt recebe como parmetro um objeto PublicKey e o
dado a ser cifrado. Decrypt recebe um objeto PrivateKey, o dado cifrado e a senha da cifragem
da chave, caso ela tenha sido utilizada.
Em SymmetricCipher, os dois mtodos encrypt e decrypt recebem como parmetro um objeto
SymmetricKey, o dado a ser cifrado/decifrado, o algoritmo e o modo de operao do cifrados.
Um dos princıpios basicos para a existencia de uma ICP e a assinatura digital. Nao existiria
certificado digital sem que uma terceira parte confiavel pudesse assinar um certificado. Mais
detalhes sao encontrados na secao 2.4.
O grupo Assinador (Figura 24) e composto por uma interface: Signer. Esta e responsavel
66
por assinar e por verificar a assinatura de dados. Ela possui dois metodos.
Figura 24: Diagrama de Classes das interfaces do grupo Assinador
O primeiro, sign, e responsavel por assinar um dado. Ele recebe como parametro o algo-
ritmo de assinatura, um objeto da classe PrivateKey que ira assinar o dado, a funcao resumo do
dado que sera assinado e como ultimo parametro, este opcional, a senha pela qual foi cifrada
a chave privada. Este metodo retorna a funcao resumo assinada. Caso o objeto PrivateKey
represente a chave privada de uma Engine, o mtodo retornar a chave assinada por esta.
O segundo, verify, e responsavel por verificar a assinatura de um dado. Ele recebe como
parametro o dado assinado, o algoritmo de assinatura, a funcao resumo do dado que foi assinado
e um objeto da classe PublicKey, sendo este a chave publica de quem assinou o dado. Este
metodo retorna TRUE caso a assinatura coincidir e FALSE caso contrario.
MODULO UTILIDADES Este modulo da biblioteca e responsavel pelos utilitarios ne-
cessarios a biblioteca. Aqui foi implementado a classe LDAP, responsavel por todo o suporte a
DP LDAP (ZEILENGA, 2006).
Normalmente apos a emissao de um certificado digital, a AC emissora publica este certifi-
cado em um diretorio publico (para maiores informacoes, vide pagina 33). Um diretorio publico
LDAP e um DP que utiliza o protocolo LDAP (SERMERSHEIM, 2006).
Segundo OpenLDAP (2007) LDAP e um protocolo leve de acesso a diretorios e roda so-
bre TCP/IP. Foi criado como uma alternativa ao protocolo Directory Access Protocol (DAP) e
utilizado inicialmente como uma interface de acesso a diretorios X.500 (definido pela norma
ISO/IEC 9594-1).
Dado um determinado DP LDAP, para que seja adicionado informacoes a base de dados
e utilizado a importacao de um arquivo LDAP Data Interchange Format (LDIF). LDIF e um
arquivo texto utilizado para adicionar, alterar e remover informacoes de uma base. Ele e definido
pela RFC2849 (GOOD, 2000).
O metodo getLDIF da classe LDAP e utilizado para a geracao do texto de um arquivos
LDIF. Ele recebe como parametros uma lista de objetos Certificate, que serao inseridos no
arquivo LDIF, e um string contendo a arvore de diretorios do diretorio publico. Um exemplo de
arvore de diretorios seria “dc=labsec, dc=ufsc, dc=br” Este metodo retorna o texto do arquivo
67
LDIF que sera utilizado na atualizacao do diretorio publico.
IMPLEMENTACAO DA BIBLIOTECA
A implementacao da biblioteca foi projetada para utilizar a biblioteca OpenSSL. Mas este
tem suporte somente para linguagem de programacao C. O LabSEC possui uma biblioteca cha-
mada LibCryptoSec, que funciona como um involucro da biblioteca OpenSSL. A LibCryptoSec
e feita em C++, possui uma documentacao melhor que a biblioteca OpenSSL, e e orientada a
objetos. A utilizacao da LibCryptoSec facilita muito o desenvolvimento de aplicacoes utilizando
OpenSSL. Porem, ambas bibliotecas foram desenvolvidas utilizando linguagens diferentes de
PHP (a linguagem utilizada para implementar a biblioteca do SGCI). Isso gerou um problema
de compatibilidade.
Pensou-se em utilizar o OpenSSL linha de comando. O biblioteca do SGCI iria fazer uma
chamada ao sistema, utilizando a linha de comando da ferramenta OpenSSL. Os resultados
seriam retornados em forma de texto, e a biblioteca iria transformar este texto em objetos. Se,
futuramente, a ferramenta OpenSSL modificar um unico caractere no retorno das chamadas a
linha de comando, o SGCI iria ter problemas.
Pesquisou-se entao uma forma de fazer com que programas C++ pudessem se comunicar
com PHP. Foi descoberto que e possıvel criar modulos, que fazem a comunicacao entre progra-
mas PHP e C++. Como as interfaces entre as bibliotecas OpenSSL e LibCryptoSec nao serao
modificadas (isto causaria problemas a varios programas, diminuindo muito a credibilidade da
biblioteca), nao ha problemas se alteracoes ocorrerem no futuro! Os dados sempre serao retor-
nados do mesmo jeito, em objetos.
Em paralelo ao desenvolvimento da biblioteca de seguranca do SGCI, houve o desenvolvi-
mento do modulo para PHP. Ele foi chamado de ModCryptoSec e maiores informacoes podem
ser encontradas em (CRUZ; STEINMANN, 2007). Este modulo foi utilizado na implementacao
desta biblioteca.
As interfaces explicadas anteriormente foram todas implementadas fazendo uso deste modulo.
As classes que implementam as interfaces do SGCI fazem chamadas ao modulo, que faz cha-
madas a LibCryptoSec, que por sua vez realiza chamadas ao OpenSSL. A biblioteca OpenSSL
retorna em linguagem de programacao C, a LibCryptoSec transforma para objetos em C++, o
modulo transfere esses objetos para tipos primitivos de PHP. E por ultimo, as classes da biblio-
teca do SGCI transformam estes tipos primitivos em objetos da biblioteca.
A Figura 25 demonstra o empacotamento das bibliotecas. No centro, ha a biblioteca
68
OpenSSL, sobre ela ha a LibCryptoSec, sobre esta ha o modulo, e por ultimo a biblioteca do
SGCI.
Esta implementacao e apenas uma maneira de implementar a biblioteca do SGCI. No futuro,
atraves da utilizacao da interfaces, essa implementacao podera ser substituıda por uma mais
otimizada, sem ser necessario alterar o codigo-fonte do SGCI.
Figura 25: Camadas da Biblioteca de Seguranca do SGCI
A implementacao completa pode ser encontrada no Apendice D.
TESTES DA BIBLIOTECA
Um dos requisitos da biblioteca e que ela deve ser totalmente autotestavel. Para isto, foram
desenvolvidos varios testes. Cada classe implementada possui no mınimo um arquivo de teste.
Cada um desses arquivos, possui uma bateria de testes. Cada arquivo e responsavel por testar
no mınimo uma classe por completo. Isto inclui testar todas as funcionalidades da classe, bem
como todos os comportamentos anormais possıveis (parametros invalidos, execucao erronea das
classes, etc). Os testes foram baseados nas metricas de qualidade designadas em Koscianski e
Soares (2006).
Para verificar a qualidade dos testes, foram utilizados em conjunto o framework PHPUnit,
e o XDebug. O framework PHPUnit foi utilizado para agilizar o desenvolvimento dos testes.
O XDebug foi utilizado em conjunto com o PHPUnit, para verificar quais linhas dos codigos-
fontes foram testados. A figura 26 apresenta uma tela de exemplo. As linhas que foram testadas
aparecem em verde, as que nao foram testadas ficam em vermelho.
O criterio adotado para os testes serem considerados bons, alem de produzirem os resulta-
dos esperados, e que cada linha deveria ser executada no mınimo uma vez.
69
Figura 26: Tela de exemplo de saıda do PHPUnit com Xdebug
70
5 CONSIDERACOES FINAIS
No desenvolvimento deste trabalho, todos os objetivos foram alcancados.
O estudo sobre o funcionamento de uma ICP permitiu obter o conhecimento necessario
para fazer crıticas ao SGCI, e observar os seus pontos fortes. A experiencia pratica adquirida na
utilizacao e desenvolvimento de melhorias ao SGCI versao 1.3.0, aliada a teoria, permitiu obter
uma base solida para projetar o SGCI versao 2.0.0.
As etapas de melhorias no SGCI versao 1.3.0 foram uteis para perceber a dificuldade em dar
manutencao em um programa sem documentacao. Tambem foi util para perceber a necessidade
dos testes automatizados. Quando uma pequena alteracao era feita no programa, todo o plano de
testes era refeito para garantir que outras partes nao fossem afetadas, perdendo-se muito tempo.
A modularidade tambem foi um conceito muito importante aprendido durante as melhorias
efetuas no SGCI versao 1.3.0. O sistema nao dispunha de uma boa modularidade, uma alteracao
pequena geralmente causava efeitos em outras partes do sistema.
Na etapa de analise e projeto do sistema os requisitos foram definidos fundamentando-se
nos problemas e sucessos da experiencia adquirida no SGCI versao 1.3.0. Apos os requisitos de-
finidos, foi iniciado o projeto do sistema. Durante a faze de projeto, encontrou-se a necessidade
do desenvolvimento de uma biblioteca de seguranca para ser utilizada neste sistema.
A biblioteca desenvolvida possui todos os requisitos definidos, como pode ser vista nos
apendices. Todos os requisitos definidos para o SGCI podem ser estendidos a biblioteca, tais
como desenvolvimento baseada no modelo de processos CMMI, suporte a HSM e certificados
EV-SSL, integracao com LDAP entre outros.
O proximo passo a ser executado, e a implementacao da proposta feita neste trabalho. Uma
melhoria adicional a proposta, e criar um utilitario para fazer a migracao dos dados (banco de
dados, estrutura de diretorios, etc) do SGCI versao 1.3.0 para o SGCI versao 2.0.0.
Algumas sugestoes de pesquisas futuras podem ser feitas. Estudos para encontrar uma
forma segura de automatizar os protocolos de transmissao de informacoes entre as entidades.
Tambem poderia ser estudado uma forma de dar suporte a tipos de entidades especıficas, como
Autoridade Certificadora Temporal (RIVEST; SHAMIR; WAGNER, 1996), Autoridade Certi-
71
ficadora Otimizadora (NOTOYA et al., 2007), entre outras.
72
REFERENCIAS
ACHOUR, M. et al. PHP Manual. PHP Documentation Group, 2007. Disponıvel em:<”http://www.php.net/manual/en/index.php”>. Acesso em: 29 set. 2007.
ADAMS, C. et al. Internet X.509 Public Key Infrastructure Certificate Management Protocol(CMP). IETF, set. 2005. RFC 4210 (Proposed Standard). (Request for Comments, 4210).Disponıvel em: <http://www.ietf.org/rfc/rfc4210.txt>.
AGP, A. de Gerencia de P. Declaracao de Praticas e Polıticas de Certificacao da AC Raiz daICPEDU. [S.l.], 2007.
ALVAREZ, M. A. Esquema do funcionamento das pginas PHP. 2005. 1 gravura. Disponıvelem: <http://www.criarweb.com/artigos/images/diagrama-php.gif>. Acesso em: 01 out. 2007.
APACHE. The Apache Software Foundation, 200–. Disponıvel em:<http://www.apache.org/>. Acesso em: 29 set. 2007.
BECK, K. Simple Smalltalk Testing: With Patterns. First Class Software, Inc., 1995. Disponıvelem: <http://www.xprogramming.com/testfram.htm>. Acesso em: 12 out. 2007.
BERGMANN, S. Testing PHP Applications with PHPUnit 3. 2006. Disponıvel em:<http://sebastian-bergmann.de/talks/2006-11-02-PHPUnit.pdf>. Acesso em: 12 out. 2007.
BERGMANN, S. PHPUnit. 2007. Disponıvel em: <http://www.phpunit.de/wiki/>. Acessoem: 12 out. 2007.
CALLAS, J. et al. OpenPGP Message Format. IETF, nov. 1998. RFC 2440 (Proposed Stan-dard). (Request for Comments, 2440). Disponıvel em: <http://www.ietf.org/rfc/rfc2440.txt>.
CHOWDHURY, K.; YEGANI, P.; MADOUR, L. Dynamic Host Configuration Protocol(DHCP) Options for Broadcast and Multicast Control Servers. IETF, nov. 2005.RFC 4280 (Proposed Standard). (Request for Comments, 4280). Disponıvel em:<http://www.ietf.org/rfc/rfc4280.txt>.
COLLINS-SUSSMAN, B.; FITZPATRICK, B. W.; PILATO, C. M. Version control withSubversion. 1. ed. O’Reilly Media, Inc., 2004. ISBN 0-596-00448-6. Disponıvel em:<http://svnbook.red-bean.com/>. Acesso em: 29 set. 2007.
CRUZ, G. F. da; STEINMANN, G. Infra-estrutura em Chaves Publicas Temporal. [S.l.], 2007.
CUSToDIO, R. F. Infra-estrutura de Chaves Publicas: Conceitos Basicos. LabSEC, Nov.2004. Disponıvel em: <http://www.icpedu.labsec.ufsc.br/tiki-download file.php?fileId=13>.Acesso em: 20 set. 2007.
CUSToDIO, R. F. ICPEDU (Infra-Estrutura de Chaves Publicas para Pesquisae Ensino). LabSEC, 2006. Disponıvel em: <http://www.icpedu.labsec.ufsc.br/tiki-download file.php?fileId=14>. Acesso em: 20 set. 2007.
73
CUSToDIO, R. F.; FREITAS, D. S. de. SISTEMA LIVRE PARA A GESTAO DO CICLODE VIDA DE CERTIFICADOS DIGITAIS NA ICP-BRASIL. LabSEC, 2004. Disponıvel em:<http://www.icpedu.labsec.ufsc.br/tiki-download file.php?fileId=96>. Acesso em: 20 set.2007.
CUSToDIO, R. F. et al. GT-ICP-EDU: Manual de Sistemas da Infra-estrutura de ChavesPublicas Educacional. Jan. 2005. Disponıvel em: <http://www.icpedu.labsec.ufsc.br/tiki-download file.php?fileId=10>. Acesso em: 12 fev. 2006.
DIFFIE, W.; HELLMAN, M. E. New directions in cryptography. IEEE Transac-tions on Information Theory, IT-22, n. 6, p. 644–654, Nov. 1976. Disponıvel em:<http://citeseer.ist.psu.edu/diffie76new.html>. Acesso em: 04 out. 2007.
ELLISON, C. et al. SPKI Certificate Theory. IETF, set. 1999. RFC 2693 (Experimental).(Request for Comments, 2693). Disponıvel em: <http://www.ietf.org/rfc/rfc2693.txt>.
FERNANDES, A. J. Risking “trust” in a public key infrastructure: old techniques of managingrisk applied to new technology. In: Decision Support Systems. [S.l.]: Elsevier Science, 2001.Volume 31, p. 303 – 322.
FREEMAN, E. et al. Head First Design Patterns. [S.l.]: O’Reilly Media, Inc, 2004. ISBN0-596-00712-4.
GAMMA, E. et al. Design patterns: elements of reusable object-oriented software. [S.l.]:Addison-Wesley Professional, 1995.
GILL, P. C. Introduccion A La Criptografia. 2. ed. [S.l.]: Ra-Ma, 2002.
GIUDICELLI, F. NewPKI. 2007. Disponıvel em: <http://www.newpki.org/>. Acesso em: 04out. 2007.
GOOD, G. The LDAP Data Interchange Format (LDIF) - Technical Specification. IETF,jun. 2000. RFC 2849 (Proposed Standard). (Request for Comments, 2849). Disponıvel em:<http://www.ietf.org/rfc/rfc2849.txt>.
HOUSLEY, R.; POLK, T. Planning for PKI - Best Practices Guide for Deploying Public KeyInfrastructure. New York: Wiley Computer Publishing, 2001.
HOUSLEY, R. et al. Internet X.509 Public Key Infrastructure Certificate and Cer-tificate Revocation List (CRL) Profile. IETF, abr. 2002. RFC 3280 (Proposed Stan-dard). (Request for Comments, 3280). Updated by RFCs 4325, 4630. Disponıvel em:<http://www.ietf.org/rfc/rfc3280.txt>.
IGNACZAK, J. ao C. Um novo modelo de Infra-estrutura de Chaves Publicas para uso noBrasil utilizando aplicativos de codigo fonte aberto. Dissertacao (Mestrado) — UniversidadeFederal de Santa Catarina, 2002. Disponıvel em: <https://www2.labsec.ufsc.br//tiki-list file gallery.php?galleryId=4>. Acesso em: 29 set. 2007.
ITI, I. N. de Tecnologia da Informacao. ICP Brasil: Infra-estrutura de Chaves PublicasBrasileira. 2007. Disponıvel em: <http://www.icpbrasil.gov.br/>. Acesso em: 03 jul. 2007.
74
ITU-T. Information technology Open Systems Interconnection The Directory: Public-key andattribute certificate frameworks. [S.l.], Ago. 2005. Disponıvel em: <”http://www.itu.int/rec/T-REC-X.509-200508-I”>. Acesso em: 04 out. 2007.
KOHNFELDER, L. M. Towards a Practical Public-Key Cryptosystem. Dissertacao(Mestrado) — Massachusetts Institute of Technology, Maio 1978. Disponıvel em:<http://theory.csail.mit.edu/ cis/theses/kohnfelder-bs.pdf>. Acesso em: 04 out. 2007.
KOSCIANSKI, A.; SOARES, M. dos S. Qualidade de Software. [S.l.]: Novatec Editora, 2006.
LABORATORIES, R. PKCS #7: Cryptographic Message Syntax Standard. Nov. 1993.Disponıvel em: <http://citeseer.ist.psu.edu/23666.html>. Acesso em: 04 out. 2007.
LARMAN, C. Applying UML and patterns: an introduction to object-oriented analysis anddesign an iterative development. 3. ed. [S.l.]: Pearson Education Inc., 2005.
MEYER, B. Object-Oriented Software Construction. [S.l.]: Prentice Hall, 1997.
NOTOYA, A. E. et al. Use of optimized certificates for efficient validation of digital signature.2007.
OPENCA Project. OpenCA PKI Research Labs, 2007. Disponıvel em:<https://www.openca.org/>. Acesso em: 04 out. 2007.
OPENLDAP. OpenLDAP Foundation, 200–. Disponıvel em: <http://www.openldap.org/>.Acesso em: 29 set. 2007.
OPENLDAP. OpenLDAP Foundation, Jan. 2007. Disponıvel em:<http://www.openldap.org/doc/admin23/>. Acesso em: 29 set. 2007.
OPENSSL. The OpenSSL Project, 200–. Disponıvel em: <http://www.openssl.org/>. Acessoem: 29 set. 2007.
PHP: Hypertext Preprocessor. The PHP Group, 200–. Disponıvel em: <http://www.php.net/>.Acesso em: 29 set. 2007.
POSTGRESQL. PostgreSQL Global Development Group, 200–. Disponıvel em:<http://www.postgresql.org/>. Acesso em: 29 set. 2007.
PRESSMAN, R. S. Engenharia de Software. 5. ed. [S.l.]: McGraw-Hill, 2002.
REENSKAUG, T. Models - views - controllers. Dez. 1979. Disponıvel em:<http://heim.ifi.uio.no/ trygver/1979/mvc-2/1979-12-MVC.pdf>. Acesso em: 01 out.2007.
REENSKAUG, T. The original mvc reports. p. 14, Fev. 2007. Disponıvel em:<http://heim.ifi.uio.no/ trygver/2007/MVC Originals.pdf>. Acesso em: 01 out. 2007.
RIVEST, R. L.; SHAMIR, A.; ADLEMAN, L. M. A method for obtaining digital signaturesand public-key cryptosystems. Communications of the ACM, v. 21, n. 2, p. 120–126, 1978.Disponıvel em: <http://people.csail.mit.edu/rivest/rsapaper.pdf>. Acesso em: 04 out. 2007.
75
RIVEST, R. L.; SHAMIR, A.; WAGNER, D. A. Time-lock puzzles and timed-releaseCrypto. [S.l.], 1996. Disponıvel em: <http://people.csail.mit.edu/rivest/RivestShamirWagner-timelock.ps>. Acesso em: 19 out. 2007.
RNP et al. GT ICP-EDU II. RNP, 2004. Disponıvel em: <http://www.rnp.br/pd/gts2004-2005/chaves publicas.html>. Acesso em: 29 set. 2007.
RNP et al. ICP-EDU II - Modulo de HW e Servicos Seguros em Redes de Computadores. RNP,Ago. 2004. Disponıvel em: <http://www.rnp.br/ arquivo/documentos/pal0219.pdf>. Acessoem: 29 set. 2007.
ROCHA, L. F. ICP-EDU: disseminando a certificacao digital no ambito academico. 2004.Disponıvel em: <http://www.rnp.br/noticias/imprensa/2004/not-imp-040927.html>. Acessoem: 28 set. 2007.
Rsa Laboratories. PKCS #10: Certification Request Syntax Standard. Maio 2000. Disponıvelem: <http://citeseer.ist.psu.edu/3954.html>. Acesso em: 04 out. 2007.
SCHNEIER, B. Applied cryptography: protocols, algorithms, and source code in C. 2nd. ed.New York: Wiley Computer Publishing, 1996. ISBN 0–471–12845–7.
SERMERSHEIM, J. Lightweight Directory Access Protocol (LDAP): The Protocol. IETF,jun. 2006. RFC 4511 (Proposed Standard). (Request for Comments, 4511). Disponıvel em:<http://www.ietf.org/rfc/rfc4511.txt>.
STALLINGS, W. Cryptography and Network Security: Principles and Practice. 3rd.. ed.Upper Saddle River, NJ, USA: Pearson Education, 2003. ISBN 0-13-091429-0.
STINSON, D. Cryptography: Theory and Practice. [S.l.]: Chapman & Hall-CRC, 2002. ISBN1-58488-206-9.
SUTIL, J. M. Implementando novas abordagens para a troca do parde chaves de Autoridades Certificadoras. [S.l.], 2007. Disponıvel em:<http://projetos.inf.ufsc.br/arquivos projetos/projeto 452/tcc jeandre monteiro sutil v1.0.pdf>.Acesso em: 17 out. 2007.
TRAC. Edgewall Software, 2007. Disponıvel em: <http://trac.edgewall.org/>. Acesso em: 13out. 2007.
TZU, S. The Art of War. 1. ed. [S.l.]: Dover Publications, 2002.
VIGIL, M. A. G. Autoridade Certificadora de Correio Eletronico. [S.l.], 2007. Disponıvel em:<http://projetos.inf.ufsc.br/arquivos projetos/projeto 497/TCC-AC-Correio.pdf>. Acesso em:17 out. 2007.
W3C, W. W. W. C. Extensible Markup Language (XML). 2007. Disponıvel em:<http://www.w3.org/XML/>. Acesso em: 12 out. 2007.
WHAT is CMMI. Carnegie Mellon Software Engineering Institute (SEI), 2007. Disponıvel em:<http://www.sei.cmu.edu/cmmi/general/>. Acesso em: 29 set. 2007.
WHY Zend Framework? Zend Technologies, 2007. Disponıvel em:<http://framework.zend.com/whyzf>. Acesso em: 29 set. 2007.
76
XDEBUG extension for PHP. Derick Rethans, 2007. Disponıvel em: <http://xdebug.org/>.Acesso em: 29 set. 2007.
ZEILENGA, K. Lightweight Directory Access Protocol (LDAP): Directory InformationModels. IETF, jun. 2006. RFC 4512 (Proposed Standard). (Request for Comments, 4512).Disponıvel em: <http://www.ietf.org/rfc/rfc4512.txt>.
77
APENDICE A -- PLANO DE TESTES
LOGIN DO CRIADOR
Efetuar login como criador do sistema o SGC. Deve-se testar a tentativa de acesso ao sis-
tema com o perfil de criador.
ENTRADAS
1.Informar valores para login e senha.
SAIDAS
1.Caso os valores de login e senha sejam corretos, deve-se redirecionar a pagina de login
para a pagina inicial do perfil de criacao.
2.Caso os valores sejam invalidos, deve-se alertar o usuario e manter o sistema na tela de
login.
A.1 CADASTRO DE ENTIDADES – AUTORIDADE CERTIFICADORA
Deve-se cadastrar Autoridades Certificadoras no sistema. Para isto, selecione o menu Enti-
dades, e a opcao Cadastrar nova Autoridade Certificadora.
A.1.1 ENTRADAS
1.Preencher utilizando a opcao AC Raiz.
Preencher sem utilizar campos avancados
Preencher utilizando campos avancados
78
2.Preencher utilizando a opcao AC Intermediaria por geracao de requisicao.
Preencher sem utilizar campos avancados
Preencher utilizando campos avancados
Testar encaminhando para AC externa nao cadastrada e para alguma AC do sistema
Testar encaminhando para AR externa nao cadastrada e para alguma AR do sistema
3.Preencher utilizando a opcao AC por importacao do certificado.
4.Para todos os casos preencher utilizando HSM.
5.Para todos os casos preencher sem utilizar HSM.
A.1.2 SAIDAS
1.Exibir alerta para erros de preenchimento de campos em formato invalido e/ou obri-
gatorios.
2.Quando o cadastro for realizado com sucesso, deve-se exibir paginas com os detalhes do
certificado emitido.
A.1.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
A.2 CADASTRO DE ENTIDADES – AUTORIDADE DE REGISTRO VIN-CULADA
Deve-se cadastrar Autoridades uma Autoridade de Registro Vinculada a uma autoridade
Certificadora do sistema. Para isto, selecione o menu Entidades, clique em informacoes na
listagem de Autoridades Certificadores e em Cadastrar no item AR Vinculada, ou Cadastre uma
nova Autoridade Certificadora A.1 e ao encerrar o cadastro clique em Cadastrar no item AR
Vinculada.
A.2.1 ENTRADAS
1.Preencher sem utilizar campos avancados.
2.Preencher utilizando campos avancados sem a opcao de utilizar HSM.
79
3.Preencher utilizando campos avancados com a opcao de utilizar HSM.
A.2.2 SAIDAS
1.Exibir alerta para erros de preenchimento de campos em formato invalido e/ou obri-
gatorios.
2.Quando o cadastro for realizado com sucesso, deve-se exibir paginas com os detalhes do
certificado emitido e a nova AR deve aparecer na listagem das ARs no menu Entidades.
A.2.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.1, pagina 77.
A.3 CADASTRO DE ENTIDADES – AUTORIDADE DE REGISTRO
Deve-se cadastrar Autoridades de Registro no sistema. Para isto, selecione o menu Entida-
des, e a opcao Cadastrar nova Autoridade de Registro.
A.3.1 ENTRADAS
1.Preencher utilizando a opcao AR por geracao de requisicao.
Preencher sem utilizar campos avancados
Preencher utilizando campos avancados
Testar encaminhando para AC externa nao cadastrada e para alguma AC do sistema.
2.Preencher utilizando a opcao AR por importacao do certificado.
3.Para todos os casos preencher utilizando HSM.
4.Para todos os casos preencher sem utilizar HSM.
5.Para todas as situacoes acima, testar Encaminhando para AR externa nao cadastrada e
para alguma AR do sistema.
80
A.3.2 SAIDAS
1.Exibir alerta para erros de preenchimento de campos em formato invalido e/ou obri-
gatorios.
2.Quando o cadastro for realizado com sucesso, deve-se exibir paginas com os detalhes do
certificado emitido.
3.Na listagem das entidades, as ARs recem criadas e que ainda nao foram aprovadas, devem
aparecer com a cor cinza.
A.3.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
A.4 DESATIVAR AUTORIDADE CERTIFICADORA
Deve-se destivar uma Autoridade Certificadora do sistema. Para isto, selecione o menu
Entidades, clique em uma Autoridade Certificadora e no botao desativar.
A.4.1 ENTRADAS
1.Desativar AC sem operadores e administradores cadastrados.
2.Desativar AC apenas com administradores cadastrados.
3.Desativar AC com administradores e operadores cadastrados.
A.4.2 SAIDAS
1.Exibir alerta para erro de preenchimento de senha.
2.Quando o desativacao for realizada com sucesso, deve-se exibir a pagina com a lista de
ACs e ARs cadastradas e a AC destivada deve aparecer na listagem com os textos em cor
cinza.
A.4.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.1, pagina 77.
81
A.5 ATIVAR AUTORIDADE CERTIFICADORA
Deve-se ativar uma Autoridade Certificadora do sistema. Para isto, selecione o menu Enti-
dades, clique em uma Autoridade Certificadora inativa e no botao ativar.
A.5.1 ENTRADAS
1.Ativar AC sem operadores e administradores cadastrados.
2.Ativar AC apenas com administradores cadastrados.
3.Ativar AC com administradores e operadores cadastrados.
A.5.2 SAIDAS
1.Quando o ativacao for realizada com sucesso, deve-se exibir a pagina com a lista de ACs
e ARs cadastradas.
A.5.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.1, pagina 77.
•Caso de teste A.4, pagina 80.
A.6 EXCLUIR AUTORIDADE CERTIFICADORA
Deve-se excluir uma Autoridade Certificadora do sistema. Para isto, selecione o menu
Entidades, clique em uma Autoridade Certificadora e no botao excluir.
A.6.1 ENTRADAS
1.Excluir AC sem operadores e administradores cadastrados.
2.Excluir AC apenas com administradores cadastrados.
3.Excluir AC com administradores e operadores cadastrados.
82
A.6.2 SAIDAS
1.Exibir alerta para erro de preenchimento de senha.
2.Quando a exclusao for realizada com sucesso, deve-se exibir a pagina com a lista de ACs
e ARs cadastradas e a AC excluida nao deve aparecer na lista.
A.6.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.1, pagina 77.
•Caso de teste A.4, pagina 80.
A.7 DESATIVAR AUTORIDADE DE REGISTRO
Deve-se destivar uma Autoridade de Registro do sistema. Para isto, selecione o menu Enti-
dades, clique em uma Autoridade de Registro e no botao desativar.
A.7.1 ENTRADAS
1.Desativar AR sem operadores e administradores cadastrados.
2.Desativar AR apenas com administradores cadastrados.
3.Desativar AR com administradores e operadores cadastrados.
4.Desativar AR nao relacionada a uma AC.
5.Desativar AR relacionada a uma AC.
A.7.2 SAIDAS
1.Exibir alerta para erro de preenchimento de senha.
2.Quando o desativacao for realizada com sucesso, deve-se exibir a pagina com a lista de
ACs e ARs cadastradas e a AR destivada deve aparecer na listagem com os textos em cor
cinza.
83
A.7.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.3, pagina 79.
A.8 EXCLUIR AUTORIDADE DE REGISTRO
Deve-se excluir uma Autoridade de Registro do sistema. Para isto, selecione o menu Enti-
dades, clique em uma Autoridade de Registro e no botao excluir.
A.8.1 ENTRADAS
1.Excluir AR sem operadores e administradores cadastrados.
2.Excluir AR apenas com administradores cadastrados.
3.Excluir AR com administradores e operadores cadastrados.
4.Caso uma AR esteja vinculada a uma AC, ela nao pode ser excluida.
A.8.2 SAIDAS
1.Exibir alerta para erro de preenchimento de senha.
2.Quando a exclusao for realizada com sucesso, deve-se exibir a pagina com a lista de ACs
e ARs cadastradas e a AR excluida nao deve aparecer na lista.
A.8.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.3, pagina 79.
•Caso de teste A.7, pagina 82.
A.9 CADASTRAR USUARIOS
Deve-se cadastrar usuarios para o sistema. Para isto, deve-se selecionar o menu Usuarios e
clicar em Cadastrar novo usuario.
84
A.9.1 ENTRADAS
1.Preencher utilizando campos obrigatorios.
2.Preencher utilizando todos os campos obrigatorios.
A.9.2 SAIDAS
1.Exibir alerta para erros de preenchimento.
2.Em caso de sucesso, voltar para a tela de listagem dos usuarios.
A.9.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
A.10 EXCLUIR USUARIOS
Deve-se excluir usuarios para o sistema. Para isto, deve-se selecionar o menu Usuarios e
clicar no usuario desejado.
A.10.1 ENTRADAS
1.Verificar dados do usuario e clicar em excluir.
A.10.2 SAIDAS
1.Em caso de sucesso, voltar para a tela de listagem dos usuarios.
A.10.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.9, pagina 83.
A.11 CADASTRAR ADMINISTRADORES
Deve-se cadastrar administradores para o sistema. Para isto, deve-se selecionar o menu
Administradores e clicar em Cadastrar novo Administrador.
85
A.11.1 ENTRADAS
1.Preencher para administrador de AC.
2.Preencher para administrador de AR.
A.11.2 SAIDAS
1.Exibir alerta para erros de preenchimento.
2.Em caso de sucesso, voltar para a tela de listagem dos usuarios.
A.11.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.9, pagina 83.
A.12 EXCLUIR ADMINISTRADORES
Deve-se excluir administradores para o sistema. Para isto, deve-se selecionar o menu Ad-
ministradores e marcar o(s) administrador(es) desejado(s).
A.12.1 ENTRADAS
1.Selecionar o(s) administrador(es) desejado(s) e clicar em Excluir selecionadas.
A.12.2 SAIDAS
1.Em caso de sucesso, mostrar tela de listagem sem o(s) administrador(es) removido(s).
A.12.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.11, pagina 84.
86
A.13 ALTERAR DADOS PESSOAIS
Deve-se alterar os dados pessoais do usuario criador. Para isto, selecione o menu de Dados
Pessoais.
A.13.1 ENTRADAS
1.Alterar todos os Dados Pessoais do usuario criador.
A.13.2 SAIDAS
1.Os dados devem ser alterados e aparecer preenchidos na tela.
A.13.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
A.14 ALTERAR SENHA PESSOAL
Deve-se alterar a senha pessoal do usuario criador. Para isto, selecione o menu Senha
Pessoal.
A.14.1 ENTRADAS
1.Alterar a senha pessoal.
2.Fazer logoff e logon novamente com a nova senha.
A.14.2 SAIDAS
Nao se aplica.
A.14.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
87
A.15 CADASTRAR NOVO HSM
Deve-se cadastrar um novo HSM. Para isto, selecione o menu HSM e clique em Cadastrar
Novo HSM.
A.15.1 ENTRADAS
1.Preencher todos os campos.
2.Preencher apenas campos obrigatorios.
A.15.2 SAIDAS
1.Em qualquer situacao, apos a realizacao do cadastro, alertar para o status do HSM, indi-
cando com a cor vermelha para erro, amarelo para um aviso de indisponibilidade do hsm
e verde para hsm disponıvel.
2.Indicar erros caso os campos obrigatorios nao sejam preenchidos.
A.15.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
A.16 ALTERAR INFORMACOES DO HSM
Deve-se visualizar e alterar informacoes de um HSM. Para isto, selecione o menu HSM e
clique em informacoes do HSM desejado.
A.16.1 ENTRADAS
1.Alterar as informacoes do HSM.
A.16.2 SAIDAS
1.Em qualquer situacao, apos a realizacao do cadastro, alertar para o status do HSM, indi-
cando com a cor vermelha para erro, amarelo para um aviso de indisponibilidade do hsm
e verde para hsm disponıvel.
2.Indicar erros caso os campos obrigatorios nao sejam preenchidos.
88
A.16.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.15, pagina 87.
A.17 CRIAR BACKUP
Em construcao ... modudo de backup ainda em desenvolvimento.
A.17.1 ENTRADAS
1.
2.
A.17.2 SAIDAS
1.
2.
A.17.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
A.18 RECUPERAR BACKUP
Em construcao ... modudo de backup ainda em desenvolvimento.
A.18.1 ENTRADAS
1.
2.
A.18.2 SAIDAS
1.
2.
89
A.18.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
A.19 EXPORTAR LOG
Deve-se exportar os logs do sistema. Para isto, selecione o menu Exportar Log.
A.19.1 ENTRADAS
1.Clicar na opcao download dos logs desejados.
2.Selecionar os logs desejados e Excluir.
A.19.2 SAIDAS
1.Os logs devem ser excluidos.
2.Devem ser criado um novo arquivo de log que contenha a informacao de que o log antigo
foi excluıdo.
A.19.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
A.20 CRIAR UMA ICP COM VARIOS NIVEIS HIERARQUICOS
Deve-se criar uma ICP com um grande numero de certificados emitidos e varios nıveis
hierarquicos.
A.20.1 ENTRADAS
1.Criar uma Autoridade Certificadora Raiz (ACraiz) e uma AR Vinculada (ARraiz).
2.Criar uma AC Intermediaria (ACi1) emitida pela ACraiz.
3.Criar uma relacao de confiaca entre a ACi1 e a ARraiz. (caso de teste A.34).
4.Criar uma AR (ARi1) cujo certificado sera assinado pela ACi1.
90
5.Repetir os passos 2, 3 e 4 mas o novo certificado da AC Intermediaria (ACi2) deve ser
emitido pela ACi1, a relacao de confiaca deve ser entre ACi2 e ARi1 e criar uma nova AR
(ARi2).
6.Repetir o item 5 em mais um nıvel.
7.Criar varias requisicoes de certificados para entidades finais e emiti-los a partir das ACs
Finais.
A.20.2 SAIDAS
1.O sistema deve gerenciar corretamente toda a estrutura.
A.20.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.34, pagina 97.
A.21 CRIAR UMA ICP COM PATH LENGHT DEFINIDO
Deve-se criar uma ICP com path lenght definido em 2.
A.21.1 ENTRADAS
1.Criar uma Autoridade Certificadora Raiz (ACraiz), definindo Path Lenght em 2.
2.Criar uma AR Vinculada (ARraiz).
3.Criar uma AC Intermediaria (ACi1) emitida pela ACraiz.
4.Criar uma relacao de confiaca entre a ACi1 e a ARraiz. (caso de teste A.34).
5.Criar uma AC Intermediaria (ACi2) emitida pela ACi1.
6.Criar uma relacao de confiaca entre a ACi2 e a ARraiz. (caso de teste A.34).
7.Criar uma AC Intermediaria (ACi3) emitida pela ACi2.
A.21.2 SAIDAS
1.O sistema nao deve permitir que a ACi3 seja ativada.
91
A.21.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A, pagina 77.
•Caso de teste A.34, pagina 97.
A.22 VERIFICAR SE TODAS AS AC’S APARECEM NA TELA DE AUTENTICACAO
A.22.1 ENTRADAS
1.Na tela de autenticacao deve-se selecionar a opcao Autoridade Certificadora.
A.22.2 SAIDAS
1.No “combo box”Entidade devem aparecer TODAS as Autoridades Certificadoras que
estao regularmente cadastradas.
A.23 EFETUAR AUTENTICACAO COMO ADMINISTRADOR DE UMAAC (AUTORIDADE CERTIFICADORA)
A.23.1 ENTRADAS
1.Selecionar entidade AC.
2.Selecionar funcao Administrador.
3.Informar valores para login e senha.
A.23.2 SAIDAS
1.Caso os valores de login e senha sejam corretos, deve-se redirecionar da pagina de autenticacao
para a pagina inicial de administracao de AC.
2.Caso os valores sejam invalidos, deve-se alertar o usuario e manter o sistema na tela de
login.
92
A.24 VERIFICAR SE O USUARIO AUTENTICADO E O CORRETO
A.24.1 ENTRADAS
1.Olhar na parte superior do programa, e procurar pelo nome de usuario e sua categoria
(Administrador ou Operador).
A.24.2 SAIDAS
1.Deve estar escrito o nome do usuario, e entre parenteses a sua categoria. Estes devem ser
os dados do usuario que logou-se.
A.24.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
A.25 VERIFICAR SE O CERTIFICADO DA AC EXISTE
A.25.1 ENTRADAS
1.Clicar no ıcone do certificado da AC, no canto superior esquerdo.
A.25.2 SAIDAS
1.Devera abrir uma tela de “download”de um arquivo com o nome accert.cer (que e o
certificado da AC).
A.25.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
A.26 VERIFICAR SE A POLITICA UTILIZADA E A CORRETA
A.26.1 ENTRADAS
1.Selecionar Polıtica.
2.Olhar a tabela Modulo de Gerenciamento de Polıtica.
93
A.26.2 SAIDAS
1.Na tela, devem aparecer todas as extensoes seus respectivos valores e os parametros uti-
lizados para esta AC.
A.26.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
A.27 EDITAR A POLITICA UTILIZADA
A.27.1 ENTRADAS
1.Selecionar Polıtica.
2.Clicar em Editar Polıtica.
3.Modificar os campos desejados.
4.Clicar em Atualizar.
A.27.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela de Gerenciamento de
Polıtica, e os dados devem aparecer corretamente.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
A.27.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.26, pagina 92.
A.28 VERIFICAR OS TEMPLATES CADASTRADOS
A.28.1 ENTRADAS
1.Selecionar Polıtica.
2.Olhar a tabela Templates.
94
A.28.2 SAIDAS
1.Na tela, devem aparecer o nome e o status de todos os templates cadastrados.
A.28.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
A.29 INFORMACOES SOBRE TEMPLATES
A.29.1 ENTRADAS
1.Selecionar Polıtica.
2.Clicar em Informacoes de cada template.
A.29.2 SAIDAS
1.Para cada template cadastrado, devera abrir uma tela com as informacoes CORRETAS
sobre o mesmo.
A.29.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
A.30 CADASTRAR TEMPLATE
A.30.1 ENTRADAS
1.Selecionar Polıtica.
2.Clicar em Cadastrar Template.
3.Modificar os campos desejados.
4.Clicar em Cadastrar Template.
95
A.30.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela de Gerenciamento de
Polıtica, e o novo template deve aparecer na tabela Templates.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
A.30.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.28, pagina 93.
A.31 ALTERAR TEMPLATE
A.31.1 ENTRADAS
1.Selecionar Polıtica.
2.Clicar em Informacoes do Template que desja-se alterar.
3.Clicar em Alterar.
4.Alterar os dados desejados.
5.Clicar em Atualizar Template.
A.31.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela de Gerenciamento de
Polıtica.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
A.31.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.28, pagina 93.
•Caso de teste A.30, pagina 94.
96
A.32 EXCLUIR TEMPLATE
A.32.1 ENTRADAS
1.Selecionar Polıtica.
2.Clicar em Informacoes do Template que desja-se alterar.
3.Clicar em Excluir.
A.32.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela de Gerenciamento de
Polıtica e o Template nao devera mai aparecer na tabela Templates.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
A.32.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.28, pagina 93.
•Caso de teste A.30, pagina 94.
A.33 VERIFICAR ENTIDADES CONFIAVEIS
A.33.1 ENTRADAS
1.Selecionar Relacoes de Confianca.
2.Olhar as tabelas.
A.33.2 SAIDAS
1.Devem aparecer todos os nomes das entidades confiaveis e seus respectivos tipos.
A.33.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
97
A.34 CADASTRAR NOVO RELACIONAMENTO DE CONFIANCA EMUMA AR INTERNA
A.34.1 ENTRADAS
1.Selecionar Relacoes de Confianca.
2.Clicar em Cadastrar Novo Relacionamento de Confianca.
3.Selecionar Autoridade Interna.
4.Selecionar alguma Autoridade de Registro existente na “combo box”Entidade Interna.
5.Clicar em Cadastrar.
A.34.2 SAIDAS
1.Se todos os campos estiverem corretos, devera ser redirecionado para a lista de relacoes
de confianca.
2.Se algum dado for preenchido incorretamente, o usuario devera ser informado.
A.34.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.33, pagina 96.
A.35 CADASTRAR NOVO RELACIONAMENTO DE CONFIANCA EMUMA AR EXTERNA CADASTRADA
A.35.1 ENTRADAS
1.Selecionar Relacoes de Confianca.
2.Clicar em Cadastrar Novo Relacionamento de Confianca.
3.Selecionar Autoridade Externa Cadastrada.
4.Selecionar alguma Autoridade de Registro existente na “combo box”Entidade Externa.
5.Clicar em Cadastrar.
98
A.35.2 SAIDAS
1.Se todos os campos estiverem corretos, devera ser redirecionado para a lista de relacoes
de confianca.
2.Se algum dado for preenchido incorretamente, o usuario devera ser informado.
A.35.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.33, pagina 96.
A.36 CADASTRAR NOVO RELACIONAMENTO DE CONFIANCA EMUMA AR EXTERNA NAO CADASTRADA
A.36.1 ENTRADAS
1.Selecionar Relacoes de Confianca.
2.Clicar em Cadastrar Novo Relacionamento de Confianca.
3.Selecionar Autoridade Externa Nao Cadastrada.
4.Clicar no botao Arquivo...
5.Selecionar o arquivo.
6.Clicar em Cadastrar.
A.36.2 SAIDAS
1.Se o arquivo for valido, devera ir para a tela que mostra as Entidades Externas confiaveis.
A AC adicionada deve aparecer na lista de ACs Confiaveis.
2.Se o arquivo for invalido, o usuario devera receber uma mensagem de erro.
A.36.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.33, pagina 96.
99
A.37 EXLUIR RELACIONAMENTO DE CONFIANCA
A.37.1 ENTRADAS
1.Selecionar Relacoes de Confianca.
2.Selecionar a Autoridade de Registro que desja-se exlcuir.
3.Clicar em Exlcuir selecionadas.
4.Clicar em OK.
A.37.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela de Relacoes de Confianca,
e a Autoridade de Registro nao aparecera na tabela Autoridade de Registro Confiaveis.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
A.37.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.33, pagina 96.
•Caso de teste A.34, pagina 97.
•Caso de teste A.35, pagina 97.
•Caso de teste A.36, pagina 98.
A.38 USUARIOS APARECEM CORRETAMENTE
A.38.1 ENTRADAS
1.Selecionar Usuarios.
2.Olhar a lista.
A.38.2 SAIDAS
1.Na tela, devem aparecer todos os usuarios corretamente.
100
A.38.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
A.39 INFORMACOES SOBRE USUARIOS
A.39.1 ENTRADAS
1.Selecionar Usuarios.
2.Clicar em Informacoes de cada usuario.
A.39.2 SAIDAS
1.Para cada usuario, devera abrir uma tela com as informacoes CORRETAS sobre o mesmo.
A.39.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.38, pagina 99.
A.40 CADASTRAR NOVO USUARIO
A.40.1 ENTRADAS
1.Selecionar Usuarios.
2.Selecionar Cadastrar Novo Usuario.
3.Preencher as informacoes login, nome, e-mail, data de nascimento, cpf e endereco.
4.Clicar em Cadastrar.
A.40.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela em que aparecem os
usuarios, e o novo usuario devera estar presente com as Informacoes corretas.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
101
A.40.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.38, pagina 99.
A.41 EXCLUIR USUARIO
A.41.1 ENTRADAS
1.Selecionar Usuarios.
2.Clicar em Informacoes do usuario que deseja-se excluir.
3.Clicar em Excluir.
A.41.2 SAIDAS
1.Se o usuario, que deseja-se excluir, foi criado por um Administrador desta AC, devera
voltar para a tela em que aparecem os usuarios, e o antigo usuario nao estara presente.
2.Se o usuario, que deseja-se excluir, foi criado por outro Administrador, nao sera possıvel
clicar em Excluir.
A.41.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.38, pagina 99.
•Caso de teste A.40, pagina 100.
A.42 OPERADORES APARECEM CORRETAMENTE
A.42.1 ENTRADAS
1.Selecionar Operadores.
2.Olhar a lista.
102
A.42.2 SAIDAS
1.Na tela, devem aparecer todos os operadores corretamente.
A.42.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
A.43 CADASTRAR NOVO OPERADOR
A.43.1 ENTRADAS
1.Selecionar Operadores.
2.Selecionar Cadastrar Novo Operador.
3.Preencher as informacoes usuario, senha para o operador, confirmacao da senha e senha
do administrador.
4.Clicar em Cadastrar.
A.43.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela em que aparecem os ope-
radores, e o novo operados devera estar presente com as Informacoes corretas.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
A.43.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.42, pagina 101.
A.44 EXCLUIR OPERADORES
A.44.1 ENTRADAS
1.Selecionar Operadores.
103
2.Selecionar um ou mais operadores.
3.Selecionar Excluir selecionadas.
4.Confirmar a exclusao.
A.44.2 SAIDAS
1.Se a exclusao for confirmada, devera voltar para a tela em que aparecem os operadores, e
o operador excluıdo nao aparecera mais.
2.Se a exclusao for cancelada, devera voltar para a tela em que aparecem os operadores,
e o operador que foi selecionado para ser excluıdo (mas que nao foi) devera continuar
aparecendo.
A.44.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.42, pagina 101.
•Caso de teste A.43, pagina 102.
A.45 VERIFICAR OS EXTENSOES CADASTRADOS
A.45.1 ENTRADAS
1.Selecionar Extensoes.
2.Olhar a tabela.
A.45.2 SAIDAS
1.Na tela, devem aparecer o OID e o Valor de todos as extensoes cadastradas.
A.45.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
104
A.46 INFORMACOES SOBRE EXTENSOES
A.46.1 ENTRADAS
1.Selecionar Extensoes.
2.Clicar em Informacoes de cada extensao.
A.46.2 SAIDAS
1.Para cada extensao cadastrado, devera abrir uma tela com as informacoes CORRETAS
sobre o mesmo.
A.46.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.45, pagina 103.
A.47 CADASTRAR EXTENSOES
A.47.1 ENTRADAS
1.Selecionar Extensoes.
2.Clicar em Cadastrar Nova Extensao.
3.Modificar os campos desejados.
4.Clicar em Cadastrar.
A.47.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela de Gerenciamento de Ex-
tensoes, e a nova extensao deve aparecer na tabela Extensoes.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
105
A.47.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.45, pagina 103.
A.48 ALTERAR EXTENSOES
A.48.1 ENTRADAS
1.Selecionar Extensoes.
2.Clicar em Informacoes da extensao que deseja-se alterar.
3.Clicar em Alterar.
4.Modificar o(s) campo(s) desejado(s).
5.Clicar em Atualizar.
A.48.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela de Gerenciamento de Ex-
tensoes, e a extensao deve aparecer na tabela Extensoes com seus dados atualizados.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
A.48.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.45, pagina 103.
A.49 EXCLUIR EXTENSOES
A.49.1 ENTRADAS
1.Selecionar Extensoes.
2.Clicar em Informacoes da extensao que deseja-se excluir.
3.Clicar em Excluir.
106
A.49.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela de Gerenciamento de Ex-
tensoes, e a extensao nao aparecera na tabela Extensoes.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
A.49.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
•Caso de teste A.45, pagina 103.
A.50 ALTERAR DADOS PESSOAIS
A.50.1 ENTRADAS
1.Selecionar Dados Pessoais.
2.Alterar os campos nome, e-mail, data de nascimento, CPF e endereco.
3.Clicar em Atualizar.
A.50.2 SAIDAS
1.Se nao houverem campos com dados errados, o sistema devera voltar para a tela inicial de
administracao da AC. Se isto acontecer, faca o caso de teste A.38 da pagina 99 e o caso
de teste A.39 na pagina 100.
2.Se houver algum campo com dados errados, o sistema devera informar ao usuario.
A.50.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
A.51 ALTERAR SENHA PESSOAL
A.51.1 ENTRADAS
1.Selecionar Senha Pessoal.
107
2.Preencher as informacoes senha antiga, nova senha, e confirmacao da nova senha.
3.Clicar em Alterar.
4.Selecionar Sair.
5.Executar o caso de teste A.23 da pagina 91, com a nova senha.
A.51.2 SAIDAS
1.Se as informacoes estiverem todas corretos, o sistema devera voltar para a tela inicial de
administracao da AC.
2.Se alguma informacao for invalida, o sistema devera informar ao usuario.
A.51.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.23, pagina 91.
A.52 EFETUAR AUTENTICACAO COMO OPERADOR DE UMA AC (AU-TORIDADE CERTIFICADORA)
A.52.1 ENTRADAS
1.Selecionar entidade AC.
2.Selecionar funcao Operador.
3.Informar valores para login e senha.
A.52.2 SAIDAS
1.Caso os valores de login e senha sejam corretos, deve-se redirecionar da pagina de autenticacao
para a pagina inicial de operacao de AC.
2.Caso os valores sejam invalidos, deve-se alertar o usuario e manter o sistema na tela de
login.
108
A.53 VERIFICAR SE O USUARIO AUTENTICADO E O CORRETO
A.53.1 ENTRADAS
1.Olhar na parte superior do programa, e procurar pelo nome de usuario e sua categoria
(Administrador ou Operador).
A.53.2 SAIDAS
1.Deve estar escrito o nome do usuario, e entre parenteses a sua categoria. Estes devem ser
os dados do usuario que logou-se.
A.53.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
A.54 VERIFICAR SE O CERTIFICADO DA AC EXISTE
A.54.1 ENTRADAS
1.Clicar no ıcone do certificado da AC, no canto superior esquerdo.
A.54.2 SAIDAS
1.Devera abrir uma tela de “download”de um arquivo com o nome accert.cer (que e o
certificado da AC).
A.54.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
A.55 VERIFICAR SE AS REQUISICOES APARECEM CORRETAMENTE
A.55.1 ENTRADAS
1.Selecionar Gerenciamento de Requisicoes.
2.Selecionar Aguardando avaliacao da AC.
109
3.Olhar a lista.
4.Selecionar Certificado Emitido pela AC.
5.Olhar a lista.
6.Selecionar Rejeitada pela AC.
7.Olhar a lista.
8.Certificado Revogado.
9.Olhar a lista.
A.55.2 SAIDAS
1.A cada item selecionado verificar lista de requisicoes, as informacoes apresentadas devem
aparecer corretamente.
A.55.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
•Caso de teste A.86, pagina 127.
•Caso de teste A.56, pagina 109.
•Caso de teste A.57, pagina 110.
•Caso de teste A.60, pagina 112.
A.56 APROVAR REQUISICOES
A.56.1 ENTRADAS
1.Selecionar Gerenciamento de Requisicoes.
2.Selecionar uma requisicao.
3.Clicar em Emitir certificados.
4.Preencher o campo senha do operador AR.
5.Clicar em Confirmar Aprovacao.
110
A.56.2 SAIDAS
1.Se todos os campos forem preenchidos corretamente, sera redirecionado para a tela de
gerenciamento de requisicoes.
2.Se algum campo for preenchido de forma errada, o usuario devera ser informado atraves
de uma mensagem de erro.
A.56.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
•Caso de teste A.86, pagina 127.
A.57 REJEITAR REQUISICOES
A.57.1 ENTRADAS
1.Selecionar Gerenciamento de Requisicoes.
2.Selecionar uma requisicao.
3.Clicar em Rejeitar selecionadas.
4.Preencher o campo senha do operador AR.
5.Clicar em Confirmar Rejeicao.
A.57.2 SAIDAS
1.Se todos os campos forem preenchidos corretamente, sera redirecionado para a tela de
gerenciamento de requisicoes. A requisicao rejeitada nao aparecera mais na lista Aguar-
dando Requisicao AR. Aparecera na lista Rejeitadas pela AR.
2.Se algum campo for preenchido de forma errada, o usuario devera ser informado atraves
de uma mensagem de erro.
A.57.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
•Caso de teste A.86, pagina 127.
111
A.58 IMPORTAR UMA REQUISICAO POR ARQUIVO
A.58.1 ENTRADAS
1.Selecione Gerenciamento de Requisicoes.
2.Selecione Importar requisicao.
3.Seleciona a AR validadora da requisicao, atraves do “combo box”.
4.Clique em Arquivo...
5.Selecione o Arquivo.
6.Clique em Cadastrar.
A.58.2 SAIDAS
1.Se tudo ocorrer de forma correta, devera voltar para a tela de Importacao de Requisicao
2.Se houver algo errado, o usuario devera ser informado.
A.58.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
•Caso de teste A.86, pagina 127.
A.59 VERIFICAR LISTA DE PEDIDOS DE REVOGACAO DE CERTIFI-CADOS
A.59.1 ENTRADAS
1.Selecione Revogacao de Certificados.
2.Olhe a lista.
A.59.2 SAIDAS
1.Devera aparecer todos os pedidos de revogacao de certificados que ainda nao tiveram
aprovacao da AC.
112
A.59.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
A.60 REVOGAR DE UM CERTIFICADO
A.60.1 ENTRADAS
1.Selecione Revogacao de Certificados.
2.Selecione o certificado a ser revoado.
3.Clique em Revogar selecionados.
4.Informar a senha do Operador.
5.Clique em Comfirmar Revogacao.
A.60.2 SAIDAS
1.Se todos os dados forem preenchidos corretamente, devera ser redirecionado para a tela
Revogacao de Certificados.
2.Se algum dado estiver incorreto, o usuario devera ser informado.
A.60.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
•Caso de teste A.59, pagina 111.
•Caso de teste A.90, pagina 130.
A.61 GERAR LISTA DE CERTIFICADOS REVOGADOS
A.61.1 ENTRADAS
1.Selecionar LCRs.
2.Clicar em Gerar Lista de Certificados Revogados.
3.Informar a senha do Operador.
4.Clicar em Gerar LCR.
113
A.61.2 SAIDAS
1.Se nao houverem campos com dados errados, o sistema devera voltar para a tela anterior,
atualizara as datas e adicionara a lista gerada a tabela de LCRs.
2.Se houver algum campo com dados errados, o sistema devera informar ao usuario.
A.61.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
A.62 PUBLICACAO DE CERTIFICADOS E LCRS
A.62.1 ENTRADAS
1.Selecionar Publicacao de Certificados e LCRs.
2.Preencer os campos.
3.Clicar em Gerar arquivo LDIF.
A.62.2 SAIDAS
1.Se nao houverem campos com dados errados, e a polıtica da AC permitir publicacao de
certificados digitais, o sistema devera ir para um tela que mostra a mensagem Operacao
concluıda com suscesso.
2.Se houver algum campo com dados errados ou alguma outra restricao, o sistema devera
informar ao usuario.
A.62.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
A.63 ALTERAR DADOS PESSOAIS
A.63.1 ENTRADAS
1.Selecionar Dados Pessoais.
114
2.Alterar os campos nome, e-mail, data de nascimento, CPF e endereco.
3.Clicar em Atualizar.
A.63.2 SAIDAS
1.Se nao houverem campos com dados errados, o sistema devera voltar para a tela inicial
de operacao de AR.
2.Se houver algum campo com dados errados, o sistema devera informar ao usuario.
A.63.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
A.64 ALTERAR SENHA PESSOAL
A.64.1 ENTRADAS
1.Selecionar Senha Pessoal.
2.Preencher as informacoes senha antiga, nova senha, e confirmacao da nova senha.
3.Clicar em Alterar.
4.Selecionar Sair.
5.Executar o caso de teste A.52 da pagina 107, com a nova senha.
A.64.2 SAIDAS
1.Se as informacoes estiverem todas corretos, o sistema devera voltar para a tela inicial de
operacao da AC.
2.Se alguma informacao for invalida, o sistema devera informar ao usuario.
A.64.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.52, pagina 107.
115
A.65 VERIFICAR SE TODAS AS AR’S APARECEM NA TELA DE AUTENTICACAO
Verifica na tela de login, se todas as Autoridades de Registro aparecem corretamente.
A.65.1 ENTRADAS
1.Na tela de autenticacao deve-se selecionar a opcao Autoridade de Registro.
A.65.2 SAIDAS
1.No “combo box”Entidade devem aparecer TODAS as Autoridades de Registro que estao
regularmente cadastradas.
A.66 EFETUAR AUTENTICACAO COMO ADMINISTRADOR DE UMAAR (AUTORIDADE DE REGISTRO)
Efetua o login como Administrador de uma Autoridade de Registro
A.66.1 ENTRADAS
1.Selecionar entidade AR.
2.Selecionar funcao Administrador.
3.Informar valores para login e senha.
A.66.2 SAIDAS
1.Caso os valores de login e senha sejam corretos, deve-se redirecionar da pagina de autenticacao
para a pagina inicial de administracao de AR.
2.Caso os valores sejam invalidos, deve-se alertar o usuario e manter o sistema na tela de
login.
A.67 VERIFICAR SE O USUARIO AUTENTICADO E O CORRETO
Ao efetuar login, verifica se o usuario que esta logado e o correto.
116
A.67.1 ENTRADAS
1.Olhar na parte superior do programa, e procurar pelo nome de usuario e sua categoria
(Administrador ou Operador).
A.67.2 SAIDAS
1.Deve estar escrito o nome do usuario, e entre parenteses a sua categoria. Estes devem ser
os dados do usuario que logou-se.
A.67.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
A.68 VERIFICAR SE O CERTIFICADO DA AR EXISTE
Verifica se o certificado que e mostrado na tela de Administracao de Autoridades de Regis-
tro esta salvo em algum lugar (ele existe em algum meio)
A.68.1 ENTRADAS
1.Clicar no ıcone do certificado da AR, no canto superior esquerdo.
A.68.2 SAIDAS
1.Devera abrir uma tela de “download”de um arquivo com o nome arcert.cer (que e o certi-
ficado da AR).
A.68.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
A.69 ENTIDADES EXTERNAS - VERIFICAR AR’S CONFIAVEIS
Verifica se a lista de Autoridade de Registro confiaveis esta correta (nao esta faltando ne-
nhuma autoridade, e nem ha autoridades “a mais”).
117
A.69.1 ENTRADAS
1.Selecionar Entidades Externas
2.Olhar a lista de Autoridades de Registro Confiaveis.
A.69.2 SAIDAS
1.Deverao aparecer TODAS as AR’s confiaveis.
A.69.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
A.70 CADASTRAR NOVO RELACIONAMENTO DE CONFIANCA EMUMA AR EXTERNA CADASTRADA
Cadastra um relacionamento de confianca em uma Autoridade de Registro Externa.
A.70.1 ENTRADAS
1.Selecionar Entidades Externas.
2.Selecionar Cadastrar Novo Relacionamento de Confianca.
3.Selecionar Autoridade Externa Cadastrada.
4.Selecionar alguma Autoridade de Registro existente na “combo box”Entidade Externa.
5.Clicar em Cadastrar.
A.70.2 SAIDAS
1.Se todos os campos estiverem corretos, devera ser redirecionado para a lista de relacoes
de confianca
2.Se algum dado for preenchido incorretamente, o usuario devera ser informado
118
A.70.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
•Caso de teste A.60, pagina 112.
A.71 CADASTRAR NOVO RELACIONAMENTO DE CONFIANCA EMUMA AR EXTERNA NAO CADASTRADA
Efetua o cadastro de um relacionamento de confianca em uma Autoridade de Registro Ex-
terna.
A.71.1 ENTRADAS
1.Selecionar Entidades Externas.
2.Selecionar Cadastrar Novo Relacionamento de Confianca.
3.Selecionar Autoridade Externa Nao Cadastrada.
4.Clicar no botao Arquivo...
5.Selecionar o arquivo.
6.Clicar no botao Cadastrar.
A.71.2 SAIDAS
1.Se o arquivo for valido, devera ir para a tela que mostra as Entidades Externas confiaveis.
A AC adicionada deve aparecer na lista de ACs Confiaveis.
2.Se o arquivo for invalido, o usuario devera receber uma mensagem de erro.
A.71.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
A.72 ARQUIVO DE CONFIGURACAO - MUDAR PARA SIM
Altera a opcao do arquivo de configuracao para sim.
119
A.72.1 ENTRADAS
1.Selecionar Arquivo de Configuracao.
2.Selecionar sim.
3.Clicar em Atualizar.
A.72.2 SAIDAS
1.O sistema devera continuar na mesma tela, sem exibir nenhum erro, porem com a opcao
selecionada em SIM. Para confirmar que o arquivo de configuracao esta sendo publicado,
devera clicar no link Arquivos de configuracao, na pagina de login. E verificar na lista-
gem, se existe a AR que foi publicado o arquivo de configuracao.
A.72.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
A.73 ARQUIVO DE CONFIGURACAO - MUDAR PARA NAO
Altera a opcao do arquivo de configuracao para nao.
A.73.1 ENTRADAS
1.Selecionar Arquivo de Configuracao.
2.Selecionar nao.
3.Clicar em Atualizar.
A.73.2 SAIDAS
1.O sistema devera continuar na mesma tela, sem exibir nenhum erro, porem com a opcao
selecionada em NAO. Para confirmar que o arquivo de configuracao nao esta sendo pu-
blicado, devera ser tentado estabelecer uma relacao de confianca, entre esta AR, e uma
outra AC.
120
A.73.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
A.74 USUARIOS APARECEM CORRETAMENTE
Verifica se na lista de usuarios, aparecem os usuarios corretos.
A.74.1 ENTRADAS
1.Selecionar Usuarios.
2.Olhar a lista.
A.74.2 SAIDAS
1.Na tela, devem aparecer todos os usuarios corretamente.
A.74.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
A.75 INFORMACOES SOBRE USUARIOS
A.75.1 ENTRADAS
1.Selecionar Usuarios.
2.Clicar em Informacoes de cada usuario.
A.75.2 SAIDAS
1.Para cada usuario, devera abrir uma tela com as informacoes CORRETAS sobre o mesmo.
A.75.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
•Caso de teste A.74, pagina 120.
121
A.76 CADASTRAR NOVO USUARIO
Cadastra um novo usuario vinculado ao administrador logado atualmente no sistema.
A.76.1 ENTRADAS
1.Selecionar Usuarios.
2.Selecionar Cadastrar Novo Usuario.
3.Preencher as informacoes login, nome, e-mail, data de nascimento, cpf e endereco.
4.Clicar em Cadastrar.
A.76.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela em que aparecem os
usuarios, e o novo usuario devera estar presente com as Informacoes corretas.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
A.76.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
•Caso de teste A.74, pagina 120.
A.77 OPERADORES APARECEM CORRETAMENTE
Verfica se na lista de operadores aparecem os operadores corretos.
A.77.1 ENTRADAS
1.Selecionar Operadores.
2.Olhar a lista.
A.77.2 SAIDAS
1.Na tela, devem aparecer todos os operadores corretamente.
122
A.77.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
A.78 CADASTRAR NOVO OPERADOR
Cadastra um novo operador vinculado ao administrador atualmente logado no sistema.
A.78.1 ENTRADAS
1.Selecionar Operadores.
2.Selecionar Cadastrar Novo Operador.
3.Preencher as informacoes usuario, senha para o operador, confirmacao da senha e senha
do administrador.
4.Clicar em Cadastrar.
A.78.2 SAIDAS
1.Se as informacoes estiverem corretas, devera voltar para a tela em que aparecem os ope-
radores, e o novo operados devera estar presente com as Informacoes corretas.
2.Se alguma informacao for cadastrada de forma errada, o sistema devera informar o erro
ao usuario.
A.78.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
•Caso de teste A.77, pagina 121.
A.79 EXCLUIR OPERADORES
Apaga algum operador da lista de operadores.
123
A.79.1 ENTRADAS
1.Selecionar Operadores.
2.Selecionar um ou mais operadores.
3.Selecionar Excluir selecionadas.
4.Confirmar a exclusao.
A.79.2 SAIDAS
1.Se a exclusao for confirmada, devera voltar para a tela em que aparecem os operadores, e
o operador excluıdo nao aparecera mais.
2.Se a exclusao for cancelada, devera voltar para a tela em que aparecem os operadores,
e o operador que foi selecionado para ser excluıdo (mas que nao foi) devera continuar
aparecendo.
A.79.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
•Caso de teste A.77, pagina 121.
•Caso de teste A.78, pagina 122.
A.80 ALTERAR DADOS PESSOAIS
Altera os dados pessoas do usuario atualmente logado no sistema.
A.80.1 ENTRADAS
1.Selecionar Dados Pessoais.
2.Alterar os campos nome, e-mail, data de nascimento, CPF e endereco.
3.Clicar em Atualizar.
124
A.80.2 SAIDAS
1.Se nao houverem campos com dados errados, o sistema devera voltar para a tela inicial
de administracao da AR. Se isto acontecer, faca o caso de teste A.74 da pagina 120 e o
caso de teste A.75 na pagina 120.
2.Se houver algum campo com dados errados, o sistema devera informar ao usuario.
A.80.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
A.81 ALTERAR SENHA PESSOAL
Altera a senha do usuario atualmente logado no sistema.
A.81.1 ENTRADAS
1.Selecionar Senha Pessoal.
2.Preencher as informacoes senha antiga, nova senha, e confirmacao da nova senha.
3.Clicar em Alterar.
4.Selecionar Sair.
5.Executar o caso de teste A.66 da pagina 115, com a nova senha.
A.81.2 SAIDAS
1.Se as informacoes estiverem todas corretos, o sistema devera voltar para a tela inicial de
administracao da AR.
2.Se alguma informacao for invalida, o sistema devera informar ao usuario.
A.81.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.66, pagina 115.
125
A.82 EFETUAR AUTENTICACAO COMO OPERADOR DE UMA AR (AU-TORIDADE DE REGISTRO)
Efetua o login como Operador de uma Autoridade de Registro.
A.82.1 ENTRADAS
1.Selecionar entidade AR.
2.Selecionar funcao Operador.
3.Informar valores para login e senha.
A.82.2 SAIDAS
1.Caso os valores de login e senha sejam corretos, deve-se redirecionar da pagina de autenticacao
para a pagina inicial de operacao de AR.
2.Caso os valores sejam invalidos, deve-se alertar o usuario e manter o sistema na tela de
login.
A.83 VERIFICAR SE O USUARIO AUTENTICADO E O CORRETO
Ao efetuar login, verifica se o usuario que esta logado e o correto.
A.83.1 ENTRADAS
1.Olhar na parte superior do programa, e procurar pelo nome de usuario e sua categoria
(devera ser Operador).
A.83.2 SAIDAS
1.Deve estar escrito o nome do usuario, e entre parenteses a sua categoria. Estes devem ser
os dados do usuario que logou-se.
A.83.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
126
A.84 VERIFICAR SE O CERTIFICADO DA AR EXISTE
Verifica se o certificado que e mostrado na tela de Administracao de Autoridades de Regis-
tro esta salvo em algum lugar (ele existe em algum meio).
A.84.1 ENTRADAS
1.Clicar no ıcone do certificado da AR, no canto superior esquerdo.
A.84.2 SAIDAS
1.Devera abrir uma tela de “download”de um arquivo com o nome arcert.cer (que e o certi-
ficado da AR).
A.84.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
A.85 VERIFICAR SE AS REQUISICOES APARECEM CORRETAMENTE
Verifica se as requisicoes feitas por outras entidades entao aparecendo corretamente.
A.85.1 ENTRADAS
1.Selecionar Gerenciamento de Requisicoes.
2.Selecionar Aguardando avaliacao da AR.
3.Olhar a lista.
4.Selecionar Rejeitada pela AR.
5.Olhar a lista.
6.Aguardando avaliacao da AC.
7.Olhar a lista.
8.Selecionar Certificado Emitido pela AC.
9.Olhar a lista.
127
10.Selecionar Rejeitada pela AC.
11.Olhar a lista.
12.Certificado Revogado.
13.Olhar a lista.
postgres add userpostgres add user
A.85.2 SAIDAS
1.A cada item selecionado verificar lista de requisicoes, as informacoes apresentadas devem
aparecer corretamente.
A.85.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
•Caso de teste A.1, pagina 77.
•Caso de teste A.3, pagina 79.
•Caso de teste A.86, pagina 127.
•Caso de teste A.87, pagina 128.
•Caso de teste A.90, pagina 130.
•Caso de teste A.56, pagina 109.
•Caso de teste A.57, pagina 110.
•Caso de teste A.60, pagina 112.
A.86 APROVAR REQUISICOES
Aprova uma requisicao da lista de requisicoes pendentes.
128
A.86.1 ENTRADAS
1.Selecionar Gerenciamento de Requisicoes.
2.Selecionar uma requisicao.
3.Clicar em Aprovar selecionadas.
4.Preencher o campo senha do operador AR.
5.Clicar em Confirmar.
A.86.2 SAIDAS
1.Se todos os campos forem preenchidos corretamente, sera redirecionado para a tela de
gerenciamento de requisicoes.
2.Se algum campo for preenchido de forma errada, o usuaio devera ser informado atraves
de uma mensagem de erro.
A.86.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
•Caso de teste A.1, pagina 77.
•Caso de teste A.3, pagina 79.
A.87 REJEITAR REQUISICOES
Rejeita uma requisicao da lista de requisicoes pendentes.
A.87.1 ENTRADAS
1.Selecionar Gerenciamento de Requisicoes.
2.Selecionar uma requisicao.
3.Clicar em Rejeitar selecionadas.
4.Preencher o campo senha do operador AR.
5.Clicar em Confirmar.
129
A.87.2 SAIDAS
1.Se todos os campos forem preenchidos corretamente, sera redirecionado para a tela de
gerenciamento de requisicoes. A requisicao rejeitada nao aparecera mais na lista Aguar-
dando Requisicao AR. Aparecera na lista Rejeitadas pela AR.
2.Se algum campo for preenchido de forma errada, o usuaio deveraser informado atraves
de uma mensagem de erro.
A.87.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
•Caso de teste A.1, pagina 77.
•Caso de teste A.3, pagina 79.
A.88 IMPORTAR UMA REQUISICAO POR ARQUIVO
Importa uma requisicao para a lista de requisicoes pendentes atraves de um arquivo.
A.88.1 ENTRADAS
1.Criar uma requisicao fora do sistema.
2.Selecione Gerenciamento de Requisicoes.
3.Selecione Importar.
4.Seleciona a AC de destino, atraves do “combo box” Selecione a AC de destino.
5.Clique em Browse.
6.Selecione o Arquivo.
7.Clique em Cadastrar.
A.88.2 SAIDAS
1.Se tudo ocorrer de forma correta, devera voltar para a tela de Importacao de Requisicao
2.Se houver algo errado, o usuario devera ser informado.
130
A.88.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
A.89 IMPORTAR UMA REQUISICAO POR MODO TEXTO
Importa uma requisicao para a lista de requisicoes pendentes atraves de um texto.
A.89.1 ENTRADAS
1.Criar uma requisicao fora do sistema.
2.Selecione Gerenciamento de Requisicoes.
3.Selecione Importar.
4.Seleciona a AC de destino, atraves do “combo box” Selecione a AC de destino.
5.Selecione Colar requisicao em modo texto.
6.Escreava (ou cole) o texto na area especıfica para o mesmo.
7.Clique em Cadastrar.
A.89.2 SAIDAS
1.Se tudo ocorrer de forma correta, devera voltar para a tela de Importacao de Requisicao
2.Se houver algo errado, o usuario devera ser informado.
A.89.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
A.90 SOLICITAR REVOGACAO DE UM CERTIFICADO
Cria o pedido de revogacao de um certificado.
131
A.90.1 ENTRADAS
1.Selecione Revogacao de Certificados.
2.Selecione Solicitar Revogacao de Certificados.
3.Selecione a Autoridade Certificadora emissora.
4.Selecione o certificado a ser revoado.
5.Preencha a Justificativa para a revogacao.
6.Clique em Solicitar Revogacao.
A.90.2 SAIDAS
1.Se todos os dados forem preenchidos corretamente, devera ser redirecionado para a tela
inicial da sessao de Operacao de AR.
2.Se algum dado estiver incorreto, o usuario devera ser informado.
A.90.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
•Caso de teste A.1, pagina 77.
•Caso de teste A.3, ppostgres add useragina 79.
•Caso de teste A.86, pagina 127.
A.91 VERIFICAR LISTA DE SOLICITACOES DE REVOGACAO DE CER-TIFICADOS
Verifica se na lista de solicitacoes para revogacao de certificados, estao aparecendo as
requisicoes corretamente.
A.91.1 ENTRADAS
1.Selecione Revogacao de Certificados.
2.Olhe a lista.
132
A.91.2 SAIDAS
1.Devera aparecer os certificados que foram solicitados para serem revogados e ainda nao
tiveram aprovacao da AC.
A.91.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
•Caso de teste A.90, pagina 130.
A.92 ALTERAR DADOS PESSOAIS
Altera os dados pessoas do usuario atualmente logado no sistema.
A.92.1 ENTRADAS
1.Selecionar Dados Pessoais.
2.Alterar os campos nome, e-mail, data de nascimento, CPF e endereco.
3.Clicar em Atualizar.
A.92.2 SAIDAS
1.Se nao houverem campos com dados errados, o sistema devera voltar para a tela inicial
de operacao de AR.
2.Se houver algum campo com dados errados, o sistema devera informar ao usuario.
A.92.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
A.93 ALTERAR SENHA PESSOAL
Altera a senha do usuario atualmente logado no sistema.
133
A.93.1 ENTRADAS
1.Selecionar Senha Pessoal.
2.Preencher as informacoes senha antiga, nova senha, e confirmacao da nova senha.
3.Clicar em Alterar.
4.Selecionar Sair.
5.Executar o caso de teste A.82 da pagina 125, com a nova senha.
A.93.2 SAIDAS
1.Se as informacoes estiverem todas corretas, o sistema devera voltar para a tela inicial de
operacao de AR.
2.Se alguma informacao for invalida, o sistema devera informar ao usuario.
A.93.3 DEPENDENCIAS DE OUTROS CASOS DE TESTE
•Caso de teste A.82, pagina 125.
134
APENDICE B -- PLANOS DE REQUISITOS
B.1 REQUISITOS
B.1.1 UTILIZAR SOFTWARE LIVRE
Devera ser desenvolvido utilizando somente softwares livres.
B.1.2 UTILIZAR ORIENTACAO A OBJETOS
Fixar PHP 5.2 ou superior como pre requisito do sistema.
Analisar possibilidade de utilizacao do zend framework.
Vantagens de utilizacao do Zend Framework:
•Codigo mais limpo e organizado;
•Biblioteca orientada a objetos;
•Independencia do tipo de base de dados;
•Facil manipulacao dos dados na base de dados;
•Inumeras classes que facilitam o desenvolvimento;
•Apenas o arquivo index.php localizado na pasta public html fica visivel pelo servidor
web.
Desvantagens de utilizacao do Zend Framework:
•Implica em maior mudanca no sistema atual, praticamente tudo sera reimplementado a
partir do conteudo atual.
135
B.1.3 CRIAR CAMADA DE PERSISTENCIA DO BANCO DE DADOS
Utilizar um padrao de projeto para implementar as classes de acesso a base de dados (exem-
plo: DAO). Caso o zend framework seja escolhido, pode-se utilizar o padrao proposto por eles
para a camada de persistencia.
B.1.4 VISIBILIDADE DOS ARQUIVOS
Atualmente todos os arquivos do sistema se encontram ”visıiveis” no servidor web. A
retirada de todos os arquivos que nao sao necessarios na pasta do servidor web e uma importante
melhoria de seguranca no sistema. Atualmente ate as chaves privadas das ACs estao visıveis
atraves do servidor web.
Uma nova hierarquia de diretorios deve ser criada, a fim de deixar visıvel apenas o que for
necessario. A listagem abaixo mostra a estrutura atual, e os elementos que nao precisam ficar
visıveis estao sublinhados:
ac/arquivos
ac/html
ac/lib
ac/script
ar/arquivos
ar/html
ar/lib
ar/script
common/html
common/lib
common/script
criador/arquivos
criador/html
136
criador/lib
criador/script
engines/
imagens/
lib/
log/
publico/
engines/
A partir destas analise podemos criar uma nova hierarquia de diretorios onde consideramos
que a pasta public html e a pasta visivel pelo servidor web. A nova estrura e descrita abaixo:
/ sources/– Pasta onde ficarao os arquivos de criacao de banco de dados, e outros arquivos
referentes a instalacao do sistema.
/library/– Pasta que contem as classes e bibliotecas utilizadas pelo sistema.
/scripts/– Pasta que contem o conteudo server-side do sistema.
/scripts/ac/– Pasta que contem o conteudo server-side da AC (antigo ac/script).
/scripts/ar/– Pasta que contem o conteudo server-side da AR (antigo ar/script).
/scripts/criador/– Pasta que contem o conteudo server-side do criador (antigo criador/script).
/engines/– Pasta para armenzamento das engines cadastradas no sistema.
/logs/erros/– Pasta para armazenamento dos arquivos de log de erros do sistema.
/logs/acoes/– Pasta para armazenamento dos logs do sistema (antigo /logs).
/arquivos/ac/– Pasta para os arquivos de configuracao das ACs.
/arquivos/ar/– Pasta para os arquivos de configuracao das ARs.
/public html/– Pasta onde os arquivos visıveis pelo servidor web devem ficar.
/public html/ac/– Pasta que contem os arquivos HTML do perfil de operacao/administracao
das autoridades certificadoras.
137
/public html/ar/– Pasta que contem os arquivos HTML do perfil de operacao/administracao
das autoridades de registro.
/public html/criador/– Pasta que contem os arquivos HTML do perfil do criador.
/public html/images/– Pasta que contem os arquivos de imagem do sistema.
/public html/styles/– Pasta que contem os arquivos CSS do sistema.
/public html/scripts/– Pasta que contem os arquivos javascript (.js) do sistema.
/public html/publico/– Pasta que contem os arquivos do diretorio publico.
Se for utilizado o zend framework, a estrutura deve ser a seguinte:
/ sources/– Pasta onde ficarao os arquivos de criacao de banco de dados, e outros arquivos
referentes a instalacao do sistema.
/library/– Pasta que contem as classes e bibliotecas utilizadas pelo sistema.
/library/Zend– Pasta que contem as classes do Zend Framework.
/application/– Pasta que contem o conteudo server-side do sistema.
/application/models/– Pasta que contem as classes referentes ao banco de dados do sistema.
/application/controllers/– Pasta que contem os controladores do sistema (AC, AR, Criador,
etc).
/application/views/– Pasta que contem os templates do conteudo html do sistema.
/application/views/scripts– Pasta que contem o conteudo html do sistema.
/engines/– Pasta para armenzamento das engines cadastradas no sistema.
/logs/erros/– Pasta para armazenamento dos arquivos de log de erros do sistema.
/logs/acoes/– Pasta para armazenamento dos logs do sistema (antigo /logs).
/arquivos/ac/– Pasta para os arquivos de configuracao das ACs.
/arquivos/ar/– Pasta para os arquivos de configuracao das ARs.
/public html/– Pasta onde os arquivos visıveis pelo servidor web devem ficar.
138
/public html/scripts/– Pasta que contem os arquivos javascript (.js).
/public html/images/– Pasta que contem os arquivos de imagem do sistema.
/public html/styles/– Pasta que contem os arquivos CSS do sistema.
B.1.5 AUDITABILIDADE
Auditabilidade dos processos: todas as atividades executadas deverao ser registradas em
logs.
Auditabilidade do codigo: o codigo devera ser totalmente aberto.
B.1.6 TRATAMENTO DE ERROS
Melhorar tratamento de erros.
Criar log de erros e nao mostrar mais os erros na tela. Armazenar em /logs/erros.
B.1.7 MELHORIAS NO CODIGO FONTE
•Remover tratamento de posts ($ POST) dentro das funcoes, estes valores devem ser
parametros das funcoes.
•Remover funcoes duplicadas.
•Utilizar Orientacao a Objetos.
B.1.8 SCRIPT DE INICIALIZACAO
Script de verificacao inicial do sistema com as seguintes caracteristicas
•Permissoes das pastas
•Conexao com o banco
B.1.9 SCRIPT DE INSTALACAO
Script que ira ser executado somente quando o SGCI for executado pela primeira vez. Neste
script o usuario digita todas as configuracoes iniciais (nome do banco de dados, usuario do
banco de dados, etc) e o script realiza a instalacao (que atualmente e feita a mao) do sistema.
139
B.1.10 CAMADA DE SEGURANCA
Conjunto de ferramentas para remover as chamadas system ao openssl via sistema.
Existem duas opcoes:
1.criar um modulo php para isso.
2.criar um conjunto de aplicacoes que substituam o openssl (pelo fato do openssl nao su-
portar parametros para engines em linha de comando) e continuar com chamadas system.
B.1.11 AR VINCULADA OBRIGATORIA
O sistema podera funcionar sem a necessidade de ARs. Isto se aplica tanto para AC Raiz
quanto para ACs intermediarias.
B.1.12 SUPORTE A CERTIFICADOS EV SSL
O sistema ira dar suporte a manipulacao de Certificados EV SSL.
B.1.13 INTERNACIONALIZACAO DO SISTEMA
O sistema ira ter suporta a internacionalizacao. Inicialmente o sistema sera feito nas lin-
guagens Portugues (Brasileiro) e Ingles.
B.2 ESTRUTURA DO SISTEMA
B.2.1 MODULO CRIADOR
•Cadastro de ACs (opcao para modelo de transacao)
Cadastro de Administradores
•Cadastro de ARs
Cadastro de Administradores
•Dados do Usuario (Criador)
•HSM
•Sessoes
140
•Relatorios
Transferencia de base de historico
B.2.2 MODULO AC
Usuario Administrador
•Templates (AC e LCR)
•Polıticas
•Extensoes (base64 ou valor)
•Relacoes de Confianca
•Operadores
•Dados pessoais
USUARIO OPERADOR
•Gerenciamento de Requisicoes
Importar requisicoes assinadas pela AR
Importar requisicoes de certificados de AR
Importar requisicoes (apenas sistema sem AR)
Exibir relatorios sobre as requisicoes (emitidas, rejeitadas, pendentes e revogadas)
•Gerenciamento de Certificados
Listagem de certificados emitidos ( + visualizacao detalhada dos certificados)
Opcao para revogar certificados diretamente (apenas sistema sem AR)
Listagem de pedidos de revogacao
Importar pedido de revogacao
Listagem de certificados revogados (com opcao para ver certificados revogados ainda
validos ou todos)
141
•LCRs
Emissao de lista de certificados revogados
•Publicacao de Certificados e LCRs
•Dados Pessoais
B.2.3 MODULO AR
USUARIO ADMINISTRADOR
•Relacoes de confianca
•Operadores
•Dados Pessoais
USUARIO OPERADOR
•Gerenciamento de Requisicoes
Exibir relatorios sobre as requisicoes (aprovadas, emitidas pela AC, rejeitadas, pen-
dentes, rejeitada pela AC)
•Gerenciamento de Certificados
Listagem de certificados emitidos ( + visualizacao detalhada dos certificados)
Listagem de pedidos de revogacao
Listagem de certificados revogados (com opcao para ver certificados revogados ainda
validos ou todos)
•Revogacao de Certificados
Solicitacao de revogacao - offline
•Dados Pessoais
142
APENDICE C -- CASOS DE USO
C.1 DESCRICAO DOS CASOS DE USO GERAIS
C.2 DESCRICAO DOS CASOS DE USO DO PERFIL CRIADOR
C.3 DESCRICAO DOS CASOS DE USO DO PERFIL ADMINISTRADORDE AC
C.4 DESCRICAO DOS CASOS DE USO DO PERFIL ADMINISTRADORDE AR
C.5 DESCRICAO DOS CASOS DE USO DO PERFIL OPERADOR DE AC
C.6 DESCRICAO DOS CASOS DE USO DO PERFIL OPERADOR DE AR
143
APENDICE D -- CODIGO-FONTE DA BIBLIOTECA
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 6 : 1 1
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ i n c l u i E x t e n s i o n
22 ∗23 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
24 ∗ /
25 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension.php’ ) ;
26
27 /∗ ∗28 ∗ I n t e r f a c e que imp lemen ta a e x t e n s o S u b j e c t A l t e r n a t i v e N a v e <br>
29 ∗30 ∗ A e x t e n s o em f o r m a t o ASN . 1 :
31 ∗ S u b j e c t A l t N a m e : := GeneralNames
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
144
35 ∗ /
36 a b s t r a c t c l a s s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n
37 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
38 {39 /∗ ∗40 ∗ S e t a o GeneralNames
41 ∗42 ∗ @access p u b l i c
43 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
44 ∗ @param GeneralNames o GeneralName a s e t a r
45 ∗ @return v o i d
46 ∗ /
47 p u b l i c a b s t r a c t f u n c t i o n s e t S u b j e c t A l t e r n a t i v e N a m e (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e s $genera lNames ) ;
48
49 /∗ ∗50 ∗ Re torna o v a l o r da e x t e n s o S u b j e c t A l t N a m e
51 ∗52 ∗ @access p u b l i c
53 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
54 ∗ @return GeneralNames o GeneralNames da e x t e n s o S u b j e c t A l t N a m e
55 ∗ /
56 p u b l i c a b s t r a c t f u n c t i o n g e t S u b j e c t A l t e r n a t i v e N a m e ( ) ;
57
58 } /∗ end o f i n t e r f a c e S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n ∗ /
59
60 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − i n t e r f a c e . C R L D i s t r i b u t i o n P o i n t E x t e n s i o n . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 4 : 1 9
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
145
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i E x t e n s i o n
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension.php’ ) ;
27
28 /∗ ∗29 ∗ I n t e r f a c e que imp lemen ta a e x t e n s o C R L D i s t r i b u t i o n P o i n t <br>
30 ∗31 ∗ A e x t e n s o em f o r m a t o ASN . 1 :
32 ∗ C R L D i s t r i b u t i o n P o i n t s : := SEQUENCE SIZE ( 1 . . MAX) OF D i s t r i b u t i o n P o i n t
33 ∗34 ∗35 ∗ @access p u b l i c
36 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
37 ∗ /
38 i n t e r f a c e
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C R L D i s t r i b u t i o n P o i n t E x t e n s i o n
39 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
40 {41 /∗ ∗42 ∗ A d i c i o n a um D i s t r i b u t i o n P o i n t
43 ∗44 ∗ @access p u b l i c
45 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
46 ∗ @param D i s t r i b u t i o n P o i n t o d i s t r i b u t i o n P o i n t a a d i c i o n a r
47 ∗ @return v o i d
48 ∗ /
49 p u b l i c f u n c t i o n a d d D i s t r i b u i t o n P o i n t (
L a b s e c S e c u r i t y C e r t i f i c a t i o n C R L D i s t r i b u t i o n P o i n t
$ d i s t r i b u t i o n P o i n t ) ;
50
51 /∗ ∗52 ∗ Re torna os D i s t i b u t i o n P o i n t s
53 ∗54 ∗ @access p u b l i c
146
55 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
56 ∗ @return a r r a y Array c o n t e n d o em cada l i n h a um D i s t r i b u t i o n P o i n t
57 ∗ /
58 p u b l i c f u n c t i o n g e t D i s t r i b u i t i o n P o i n t s ( ) ;
59
60 /∗ ∗61 ∗ Re torna o v a l o r da e x t e n s o
62 ∗63 ∗ @access p u b l i c
64 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
65 ∗ @return s t r i n g o v a l o r
66 ∗ /
67 p u b l i c a b s t r a c t f u n c t i o n g e t V a l u e ( ) ;
68
69 /∗ ∗70 ∗ Re torna o v a l o r da e x t e n s o em base 64
71 ∗72 ∗ @access p u b l i c
73 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
74 ∗ @return s t r i n g o v a l o r
75 ∗ /
76 p u b l i c a b s t r a c t f u n c t i o n ge tBase64Va lue ( ) ;
77
78 } /∗ end o f i n t e r f a c e C R L D i s t r i b u t i o n P o i n t E x t e n s i o n ∗ /
79
80 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − i n t e r f a c e . C e r t i f i c a t e P o l i c i e s E x t e n s i o n . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 3 : 5 7
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
147
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i E x t e n s i o n
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension.php’ ) ;
27 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/Policy/
PolicyInformation.php’ ) ;
28
29 /∗ ∗30 ∗ I n t e r f a c e r e s p o n s v e l p e l a e x t e n s o C e r t i f i c a t e P o l i c i e s . <br>
31 ∗ A e x t e n s o em f o r m a t o ASN . 1 : <br>
32 ∗ c e r t i f i c a t e P o l i c i e s : := SEQUENCE SIZE ( 1 . . MAX) OF
P o l i c y I n f o r m a t i o n
33 ∗34 ∗ @access p u b l i c
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ /
37 a b s t r a c t c l a s s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C e r t i f i c a t e P o l i c i e s E x t e n s i o n
38 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
39 {40 /∗ ∗41 ∗ A d i c i o n a P o l i c y I n f o r m a t i o n .
42 ∗43 ∗ @access p u b l i c
44 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
45 ∗ @param P o l i c y I n f o r m a t i o n P o l i c y I n f o r m a t i o n a a d i c i o n a r
46 ∗ @return v o i d
47 ∗ /
48 p u b l i c a b s t r a c t f u n c t i o n a d d P o l i c y I n f o r m a t i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y P o l i c y I n f o r m a t i o n
$ p o l i c y I n f o ) ;
49
50 /∗ ∗51 ∗ Re torna o ( s ) P o l i c y I n f o r m a t i o n .
52 ∗53 ∗ @access p u b l i c
54 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
148
55 ∗ @return a r r a y Array com cada l i n h a sendo um o b j e t o do t i p o P o l i c y
I n f o r m a t i o n .
56 ∗ /
57 p u b l i c a b s t r a c t f u n c t i o n g e t P o l i c i e s I n f o r m a t i o n ( ) ;
58
59 } /∗ end o f i n t e r f a c e C e r t i f i c a t e P o l i c i e s E x t e n s i o n ∗ /
60
61 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − i n t e r f a c e . S u b j e c t K e y I d e n t i f i e r E x t e n s i o n . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 6 : 3 2
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i E x t e n s i o n
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension.php’ ) ;
27
28 /∗ ∗29 ∗ I n t e r f a c e r e s p o n s a v e l p e l a e x t e n s o S u b j e c t K e y I d e n t i f i e r . <br>
30 ∗ A e x t e n s o em f o r m a t o ASN . 1 : <br>
31 ∗ S u b j e c t K e y I d e n t i f i e r : := K e y I d e n t i f i e r
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
149
35 ∗ /
36 a b s t r a c t c l a s s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n S u b j e c t K e y I d e n t i f i e r E x t e n s i o n
37 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
38 {39 /∗ ∗40 ∗ Re torna o v a l o r da e x t e n s o S u b j e c t K e y I d e n t i f i e r
41 ∗42 ∗ @access p u b l i c
43 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
44 ∗ @return s t r i n g v a l o r do campo K e y I d e n t i f i e r da e x t e n s o
S u b j e c t K e y I d e n t i f i e r
45 ∗ /
46 p u b l i c a b s t r a c t f u n c t i o n g e t K e y I d e n t i f i e r ( ) ;
47
48 /∗ ∗49 ∗ S e t a o v a l o r da e x t e n s o S u b j e c t K e y I d e n t i f i e r
50 ∗51 ∗ @access p u b l i c
52 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
53 ∗ @param s t r i n g
54 ∗ @return v o i d
55 ∗ /
56 p u b l i c a b s t r a c t f u n c t i o n s e t K e y I d e n t i f i e r ( $keyId ) ;
57
58 } /∗ end o f i n t e r f a c e S u b j e c t K e y I d e n t i f i e r E x t e n s i o n ∗ /
59
60 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − i n t e r f a c e . A u t h o r i t y K e y I d e n t i f i e r E x t e n s i o n . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 3 : 1 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
150
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i E x t e n s i o n
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension.php’ ) ;
27 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralNames.php’ ) ;
28
29 /∗ ∗30 ∗ I n t e r f a c e que imp lemen ta a e x t e n s o A u t h o r i t y K e y I d e n t i f i e r . <br>
31 ∗32 ∗ A e x t e n s o A u t h o r i t y K e y I d e n t i f i e r em f o r m a t d o ASN . 1 : <br>
33 ∗ A u t h o r i t y K e y I d e n t i f i e r : := SEQUENCE { <br>
34 ∗ k e y I d e n t i f i e r [ 0 ] K e y I d e n t i f i e r OPTIONAL , <br>
35 ∗ a u t h o r i t y C e r t I s s u e r [ 1 ] GeneralNames OPTIONAL , <br>
36 ∗ a u t h o r i t y C e r t S e r i a l N u m b e r [ 2 ] C e r t i f i c a t e S e r i a l N u m b e r OPTIONAL }<br>
37 ∗38 ∗ @access p u b l i c
39 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
40 ∗ /
41 a b s t r a c t c l a s s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n A u t h o r i t y K e y I d e n t i f i e r E x t e n s i o n
42 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
43 {44 /∗ ∗45 ∗ S e t a o campo K e y I d e n t i f i e r da e x t e n s o A u t h o r i t y K e y I d e n t i f i e r
46 ∗47 ∗ @access p u b l i c
48 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
49 ∗ @param s t r i n g K e y I d e n t i f i e r
50 ∗ @return v o i d
51 ∗ /
52 p u b l i c a b s t r a c t f u n c t i o n s e t K e y I d e n t i f i e r ( $keyId ) ;
53
54 /∗ ∗55 ∗ Re torna o v a l o r do campo K e y I d e n t i f i e r da e x t e n s o
A u t h o r i t y K e y I d e n t i f i e r
151
56 ∗57 ∗ @access p u b l i c
58 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
59 ∗ @return s t r i n g o v a l o r de K e y I d e n t i f i e r
60 ∗ /
61 p u b l i c a b s t r a c t f u n c t i o n g e t K e y I d e n t i f i e r ( ) ;
62
63 /∗ ∗64 ∗ S e t a o campo A u t h o r i t y C e r t I s s u e r da e x t e n s o A u t h o r i t y K e y I d e n t i f i e r
65 ∗66 ∗ @access p u b l i c
67 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
68 ∗ @param GeneralNames O GeneralNames a s e r a d i c i o n a d o no
A u t h o r i t y C e r t I s s u e r
69 ∗ @return v o i d
70 ∗ /
71 p u b l i c a b s t r a c t f u n c t i o n s e t A u t h o r i t y C e r t I s s u e r (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e s $ i s s u e r ) ;
72
73 /∗ ∗74 ∗ Re torna o v a l o r do campo A u t h o r i t y C e r t I s s u e r da e x t e n s o
A u t h o r i t y K e y I d e n t i f i e r
75 ∗76 ∗ @access p u b l i c
77 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
78 ∗ @return GeneralNames
79 ∗ /
80 p u b l i c a b s t r a c t f u n c t i o n g e t A u t h o r i t y C e r t I s s u e r ( ) ;
81
82 /∗ ∗83 ∗ S e t a o campo A u t h o r i t y C e r t S e r i a l N u m b e r da e x t e n s o
A u t h o r i t y K e y I d e n t i f i e r
84 ∗85 ∗ @access p u b l i c
86 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
87 ∗ @param s t r i n g o n m e r o s e r i a l
88 ∗ @return v o i d
89 ∗ /
90 p u b l i c a b s t r a c t f u n c t i o n s e t A u t h o r i t y C e r t S e r i a l N u m b e r ( $ s e r i a l ) ;
91
92 /∗ ∗93 ∗ Re torna o v a l o r do campo A u t h o r i t y C e r t S e r i a l N u m b e r da e x t e n s o
A u t h o r i t y K e y I d e n t i f i e r
152
94 ∗95 ∗ @access p u b l i c
96 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
97 ∗ @return s t r i n g o n m e r o s e r i a l
98 ∗ /
99 p u b l i c a b s t r a c t f u n c t i o n g e t A u t h o r i t y C e r t S e r i a l N u m b e r ( ) ;
100
101 } /∗ end o f i n t e r f a c e A u t h o r i t y K e y I d e n t i f i e r E x t e n s i o n ∗ /
102
103 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . B a s i c C o n s t r a i n t s E x t e n s i o n . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 3 : 3 6
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ i n c l u i E x t e n s i o n
22 ∗23 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
24 ∗ /
25 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension.php’ ) ;
26
27 /∗ ∗28 ∗ I n t e r f a c e que imp lemen ta a e x t e n s o B a s i c C o n s t r a i n t s . <br>
29 ∗30 ∗ A e x t e n s o em f o r m a t o ASN . 1 : <br>
31 ∗ B a s i c C o n s t r a i n t s : := SEQUENCE { <br>
32 ∗ cA BOOLEAN DEFAULT FALSE , <br>
153
33 ∗ p a t h L e n C o n s t r a i n t INTEGER ( 0 . . MAX) OPTIONAL } <br>
34 ∗35 ∗ @access p u b l i c
36 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
37 ∗ /
38 a b s t r a c t c l a s s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n B a s i c C o n s t r a i n t s E x t e n s i o n
39 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
40 {41 /∗ ∗42 ∗ S e t a r o v a l o r do campo CA da e x t e n s o B a s i c C o n s t r a i n t s . <br>
43 ∗ Se n o f o r passado nenhum p a r m e t r o , o v a l o r do campo s e t a d o <
br>
44 ∗ como TRUE .
45 ∗ Se o p a r m e t r o f o r passado , e s s e v a l o r s e r c o l o c a d o no campo .
46 ∗47 ∗ @access p u b l i c
48 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
49 ∗ @param boo lean Valor a s e r s e t a d o no campo CA da e x t e n s o
B a s i c C o n s t r a i n t s .
50 ∗ E s t e v a l o r o p c i o n a l . Se f o r o m i t i d o , o campo CA s e r s e t a d o como
TRUE .
51 ∗ @return v o i d
52 ∗ /
53 p u b l i c a b s t r a c t f u n c t i o n s e t C a ( $ v a l u e = TRUE) ;
54
55 /∗ ∗56 ∗ V e r i f i c a se o campo CA e s t s e t a d o como TRUE
57 ∗58 ∗ @access p u b l i c
59 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
60 ∗ @return boo lean Re torna o v a l o r do campo CA da e x t e n s o
B a s i c C o n s t r a i n t s .
61 ∗ Pode s e r TRUE ou FALSE .
62 ∗ /
63 p u b l i c a b s t r a c t f u n c t i o n i sCa ( ) ;
64
65 /∗ ∗66 ∗ S e t a o v a l o r do campo PathLeng th
67 ∗68 ∗ @access p u b l i c
69 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
70 ∗ @param i n t o tamanho do Pa thLeng th
154
71 ∗ @return v o i d
72 ∗ /
73 p u b l i c a b s t r a c t f u n c t i o n s e t P a t h L e n g t h ( $ l e n g t h ) ;
74
75 /∗ ∗76 ∗ Re torna o v a l o r do campo Pa thLeng th
77 ∗78 ∗ @access p u b l i c
79 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
80 ∗ @return i n t o tamanho do Pa thLeng th
81 ∗ /
82 p u b l i c a b s t r a c t f u n c t i o n g e t P a t h L e n g t h ( ) ;
83
84 } /∗ end o f i n t e r f a c e B a s i c C o n s t r a i n t s E x t e n s i o n ∗ /
85
86 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . CRLReasonCodeExtension . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 5 : 0 6
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ i n c l u i E x t e n s i o n
22 ∗23 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
24 ∗ /
25 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension.php’ ) ;
26
155
27 /∗ ∗28 ∗ I n t e r f a c e que imp lemen ta a e x t e n s o CRLReasonCode <br>
29 ∗30 ∗ A e x t e n s o em f o r m a t o ASN . 1 : <br>
31 ∗ CRLReason : := ENUMERATED { <br>
32 ∗ u n s p e c i f i e d ( 0 ) , <br>
33 ∗ keyCompromise ( 1 ) , <br>
34 ∗ cACompromise ( 2 ) , <br>
35 ∗ a f f i l i a t i o n C h a n g e d ( 3 ) , <br>
36 ∗ s u p e r s e d e d ( 4 ) , <br>
37 ∗ c e s s a t i o n O f O p e r a t i o n ( 5 ) , <br>
38 ∗ c e r t i f i c a t e H o l d ( 6 ) , <br>
39 ∗ removeFromCRL ( 8 ) , <br>
40 ∗ p r i v i l e g e W i t h d r a w n ( 9 ) , <br>
41 ∗ aACompromise ( 1 0 ) }42 ∗43 ∗ @access p u b l i c
44 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
45 ∗ /
46 i n t e r f a c e L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C R L R e a s o n C o d e E x t e n s i o n
47 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
48 {49 /∗ ∗50 ∗ S e t a o ReasonCode
51 ∗52 ∗ @access p u b l i c
53 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
54 ∗ @param i n t o ReasonCode
55 ∗ @return v o i d
56 ∗ /
57 p u b l i c f u n c t i o n se tCode ( $code ) ;
58
59 /∗ ∗60 ∗ Re torna o ReasonCode
61 ∗62 ∗ @access p u b l i c
63 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
64 ∗ @return i n t o v a l o r do ReasonCode
65 ∗ /
66 p u b l i c f u n c t i o n getCode ( ) ;
67
68 /∗ ∗69 ∗ Re torna o v a l o r da e x t e n s o
156
70 ∗71 ∗ @access p u b l i c
72 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
73 ∗ @return s t r i n g o v a l o r
74 ∗ /
75 p u b l i c a b s t r a c t f u n c t i o n g e t V a l u e ( ) ;
76
77 /∗ ∗78 ∗ Re torna o v a l o r da e x t e n s o em base 64
79 ∗80 ∗ @access p u b l i c
81 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
82 ∗ @return s t r i n g o v a l o r
83 ∗ /
84 p u b l i c a b s t r a c t f u n c t i o n ge tBase64Va lue ( ) ;
85
86 } /∗ end o f i n t e r f a c e CRLReasonCodeExtension ∗ /
87
88 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . CRLNumberExtension . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 4 : 4 5
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ i n c l u i E x t e n s i o n
22 ∗23 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
157
24 ∗ /
25 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension.php’ ) ;
26
27 /∗ ∗28 ∗ I n t e r f a c e que imp lemen ta a e x t e n s o CRLNumber <br>
29 ∗30 ∗ A e x t e n s o em f o r m a t o ASN . 1 : <br>
31 ∗ CRLNumber : := INTEGER ( 0 . . MAX)
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ /
36 i n t e r f a c e L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C R L N u m b e r E x t e n s i o n
37 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
38 {39 /∗ ∗40 ∗ Re torna o n m e r o da CRL
41 ∗42 ∗ @access p u b l i c
43 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
44 ∗ @return i n t o n m e r o da CRL
45 ∗ /
46 p u b l i c f u n c t i o n getNumber ( ) ;
47
48 /∗ ∗49 ∗ S e t a o n m e r o s e r i a l da CRL
50 ∗51 ∗ @access p u b l i c
52 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
53 ∗ @param i n t n m e r o s e r i a l da CRL
54 ∗ @return v o i d
55 ∗ /
56 p u b l i c f u n c t i o n setNumber ( $number ) ;
57
58 /∗ ∗59 ∗ Re torna o v a l o r da e x t e n s o
60 ∗61 ∗ @access p u b l i c
62 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
63 ∗ @return s t r i n g o v a l o r
64 ∗ /
65 p u b l i c a b s t r a c t f u n c t i o n g e t V a l u e ( ) ;
66
158
67 /∗ ∗68 ∗ Re torna o v a l o r da e x t e n s o em base 64
69 ∗70 ∗ @access p u b l i c
71 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
72 ∗ @return s t r i n g o v a l o r
73 ∗ /
74 p u b l i c a b s t r a c t f u n c t i o n ge tBase64Va lue ( ) ;
75
76 } /∗ end o f i n t e r f a c e CRLNumberExtension ∗ /
77
78 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − i n t e r f a c e . KeyUsageEx tens ion . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 5 : 5 5
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i E x t e n s i o n
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension.php’ ) ;
27
28 /∗ ∗29 ∗ I n t e r f a c e r e s p o n s v e l p e l a e x t e n s o Key Usage . <br>
30 ∗ A e x t e n s o Key Usage em ASN . 1 : <br>
159
31 ∗ KeyUsage : := BIT STRING { <br>
32 ∗ d i g i t a l S i g n a t u r e ( 0 ) , <br>
33 ∗ n o n R e p u d i a t i o n ( 1 ) , <br>
34 ∗ k e y E n c i p h e r m e n t ( 2 ) , <br>
35 ∗ d a t a E n c i p h e r m e n t ( 3 ) , <br>
36 ∗ keyAgreemen t ( 4 ) , <br>
37 ∗ k e y C e r t S i g n ( 5 ) , <br>
38 ∗ cRLSign ( 6 ) , <br>
39 ∗ e n c i p h e r O n l y ( 7 ) , <br>
40 ∗ d e c i p h e r O n l y ( 8 ) } <br>
41 ∗42 ∗ @access p u b l i c
43 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
44 ∗ /
45 a b s t r a c t c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n
46 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
47 {48
49 /∗ ∗50 ∗ Re torna uma l i s t a com as p e r m i s s e s d e f i n i d a s na e x t e n s o Key
Usage
51 ∗52 ∗ @access p u b l i c
53 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
54 ∗ @return a r r a y
55 ∗ /
56 p u b l i c a b s t r a c t f u n c t i o n g e t U s a g e s L i s t ( ) ;
57
58 /∗ ∗59 ∗ M t o d o que a l t e r a os b i t s da e x t e n s o Key Usage . <br>
60 ∗61 ∗62 ∗ @access p u b l i c
63 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
64 ∗ @param i n t usage Uma c o n s t a n t e ( d e f i n i d a na c l a s s e ) , r e p r e s e n t a n d o
65 ∗ qua l p e r m i s s o v a i s e r a d i c i o n a d o .
66 ∗ @param boo lean v a l u e P a r m e t r o o p c i o n a l . E s t e p a r m e t r o s e r v e
67 ∗ para e s p e c i f i c a r o v a l o r da p e r m i s s o d e f i n i d a em v a l u e .
68 ∗ @return v o i d
69 ∗ /
70 p u b l i c a b s t r a c t f u n c t i o n addUsage ( $usage , $ v a l u e = t rue ) ;
71
72 /∗ ∗
160
73 ∗ Re torna TRUE se a p e r m i s s o de uso da chave f o r p e r m i t i d o . <br>
74 ∗ F a l s e caso c o n t r r i o .
75 ∗76 ∗ @access p u b l i c
77 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
78 ∗ @param i n t usage Uma c o n s t a n t e ( d e f i n i d a na c l a s s e ) , r e p r e s e n t a n d o
79 ∗ qua l p e r m i s s o v a i s e r a d i c i o n a d o .
80 ∗ @return boo lean TRUE caso s e j a p e r m i t i d o a u t i l i z a o da chave
81 ∗ para o f i m d e f i n i d o no p a r m e t r o usage .
82 ∗ /
83 p u b l i c a b s t r a c t f u n c t i o n i sAl lowedUsage ( $usage ) ;
84
85 } /∗ end o f i n t e r f a c e KeyUsageEx tens ion ∗ /
86
87 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3 /∗ ∗4 ∗ s g c i − c l a s s . P o l i c y I n f o r m a t i o n . php
5 ∗6 ∗ $ Id$
7 ∗8 ∗ T h i s f i l e i s p a r t o f s g c i .
9 ∗10 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 7 : 1 3
11 ∗12 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
13 ∗ /
14
15 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {16 d i e ( ’This file was generated for PHP 5’ ) ;
17 }18
19 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/Policy/
PolicyQualifierInfo.php’ ) ;
20 r e q u i r e o n c e ( ’Labsec/Security/Certification/ObjectIdentifier.php’ ) ;
21
22 /∗ ∗23 ∗ C l a s s e que r e p r e s e n t a o t i p o P o l i c y I n f o r m a t i o n . <br>
24 ∗25 ∗ P o l i c y I n f o r m a t i o n em ASN . 1 : <br>
26 ∗
161
27 ∗28 ∗ @access p u b l i c
29 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
30 ∗ /
31 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y P o l i c y I n f o r m a t i o n
32 {33
34 p r i v a t e $ p o l i c y I d e n t i f i e r ;
35
36 p r i v a t e $ p o l i c y Q u a l i f i e r s = array ( ) ;
37
38
39 /∗ ∗40 ∗ A d i c i o n a r um P o l i c y Q u a l i f i e r I n f o
41 ∗42 ∗ @access p u b l i c
43 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
44 ∗ @param P o l i c y Q u a l i f i e r I n f o
45 ∗ @return v o i d
46 ∗ /
47 p u b l i c f u n c t i o n a d d P o l i c y Q u a l i f i e r I n f o (
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y P o l i c y Q u a l i f i e r I n f o
$ p o l i c y Q u a l i f i e r I n f o )
48
49 {50 $ t h i s−>p o l i c y Q u a l i f i e r s [ ] = $ p o l i c y Q u a l i f i e r I n f o ;
51 }52
53 /∗ ∗54 ∗ Re torna os P o l i c y Q u a l i f i e r s
55 ∗56 ∗ @access p u b l i c
57 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
58 ∗ @return a r r a y os P o l i c y Q u a l i f i e r s
59 ∗ /
60 p u b l i c f u n c t i o n g e t P o l i c y Q u a l i f i e r s ( )
61 {62 i f ( count ( $ t h i s−>p o l i c y Q u a l i f i e r s ) > 0) {63 r e t u r n $ t h i s−>p o l i c y Q u a l i f i e r s ;
64 } e l s e {65 th row new E x c e p t i o n ( "PolicyQualifier vazio.
66 Deve conter pelo menos 1 elemento!" ) ;
67 }
162
68
69 }70
71 /∗ ∗72 ∗ S e t a o I d e n t i f i c a d o r P o l i c y I D
73 ∗74 ∗ @access p u b l i c
75 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
76 ∗ @param O b j e c t I d e n t i f i e r OID a s e t a r
77 ∗ @return v o i d
78 ∗ /
79 p u b l i c f u n c t i o n s e t P o l i c y I d e n t i f i e r (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id )
80 {81 $ t h i s−>p o l i c y I d e n t i f i e r = $o id ;
82 }83
84 /∗ ∗85 ∗ Re torna o P o l i c y I D
86 ∗87 ∗ @access p u b l i c
88 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
89 ∗ @return O b j e c t I d e n t i f i e r p o l i c y I D
90 ∗ /
91 p u b l i c f u n c t i o n g e t P o l i c y I d e n t i f i e r ( )
92 {93 i f ( i s s e t ( $ t h i s−>p o l i c y I d e n t i f i e r ) ) {94 r e t u r n $ t h i s−>p o l i c y I d e n t i f i e r ;
95 } e l s e {96 th row new E x c e p t i o n ( ’ERRO: policyIdentifier n o definido.
’ ) ;
97 }98 }99
100 } /∗ end o f c l a s s P o l i c y I n f o r m a t i o n ∗ /
101
102 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3 /∗ ∗4 ∗ s g c i − c l a s s . P o l i c y Q u a l i f i e r I n f o . php
5 ∗
163
6 ∗ $ Id$
7 ∗8 ∗ T h i s f i l e i s p a r t o f s g c i .
9 ∗10 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 7 : 2 1
11 ∗12 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
13 ∗ /
14
15 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {16 d i e ( ’This file was generated for PHP 5’ ) ;
17 }18
19 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/Policy/Qualifier.php’
) ;
20
21 /∗ ∗22 ∗ C l a s s e que r e p r e s e n t a o t i p o P o l i c y Q u a l i f i e r I n f o .
23 ∗24 ∗ P o l i Q u a l i f i e r I n f o em ASN . 1 :
25 ∗ P o l i c y Q u a l i f i e r I n f o : := SEQUENCE {26 ∗ p o l i c y Q u a l i f i e r I d P o l i c y Q u a l i f i e r I d ,
27 ∗ q u a l i f i e r ANY DEFINED BY p o l i c y Q u a l i f i e r I d }28 ∗29 ∗ @access p u b l i c
30 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
31 ∗ /
32 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y P o l i c y Q u a l i f i e r I n f o
33 {34
35 p r i v a t e $ q u a l i f i e r s = array ( ) ;
36
37 /∗ ∗38 ∗ A d i c i o n a um q u a l i f i e r
39 ∗40 ∗ @access p u b l i c
41 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
42 ∗ $param O b j e c t I d e n t i f i e r o p o l i c y Q u a l i f i e r a a d i c i o n a r
43 ∗ @param Q u a l i f i e r o q u a l i f i e r a a d i c i o n a r
44 ∗ @return v o i d
45 ∗ /
46 p u b l i c f u n c t i o n a d d Q u a l i f i e r (
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y Q u a l i f i e r $ q u a l i f i e r )
164
47 {48 $ t h i s−>q u a l i f i e r s [ ] = $ q u a l i f i e r ;
49 }50
51 /∗ ∗52 ∗ Re torna os q u a l i f i e r s
53 ∗54 ∗ @access p u b l i c
55 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
56 ∗ @return a r r a y Array c o n t e n d o os q u a l i f i e r s
57 ∗ /
58 p u b l i c f u n c t i o n g e t Q u a l i f i e r s ( )
59 {60 i f ( count ( $ t h i s−>q u a l i f i e r s ) > 0) {61 r e t u r n $ t h i s−>q u a l i f i e r s ;
62 } e l s e {63 th row new E x c e p t i o n ( "Qualifiers vazio. Deve conter pelo menos 1
elemento!" ) ;
64 }65 }66
67 } /∗ end o f c l a s s P o l i c y Q u a l i f i e r I n f o ∗ /
68
69 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − c l a s s . CPSUri . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 6 : 5 4
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }
165
19
20 /∗ ∗21 ∗ i n c l u i Q u a l i f i e r
22 ∗23 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
24 ∗ /
25 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/Policy/Qualifier.php’
) ;
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/ObjectIdentifierFactory.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e que r e p r e s e n t a o t i p o CPSUri . <br>
30 ∗31 ∗ CPSUri em ASN . 1 : <br>
32 ∗ CPSuri : := I A 5 S t r i n g
33 ∗34 ∗ @access p u b l i c
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ /
37 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y C P S U r i
38 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y Q u a l i f i e r
39 {40
41 p r i v a t e $CPSuri ;
42
43 /∗ ∗44 ∗ C o n s t r u t o r que s e t a o p o l i c y Q u a l i f i e r I D
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @param s t r i n g a u r i a s e t a r . P a r m e t r o o p c i o n a l
49 ∗ @return v o i d
50 ∗ @throws E x c e p t i o n Quando o p a r m e t r o o p c i o n a l do c o n s t r u t o r n o
f o r uma s t r i n g
51 ∗ /
52 p u b l i c f u n c t i o n c o n s t r u c t ( $ u r i = n u l l )
53 {54 / / s e t a o p o l i c y Q u a l i f i e r I D
55 $oIDFa c to ry = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
56 $ t h i s−>p o l i c y Q u a l i f i e r I d = $oIDFac tory−>g e t O b j e c t I d e n t i f i e r ( ’
1.3.6.1.5.5.7.2.1’ ) ;
57
166
58 i f ( $ u r i != n u l l ) {59 $ t h i s−>s e t U r i ( $ u r i ) ;
60 }61 }62
63 /∗ ∗64 ∗ S e t a o v a l o r de CPSUri
65 ∗66 ∗ @access p u b l i c
67 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
68 ∗ @param s t r i n g o v a l o r a s e t a r
69 ∗ @return v o i d
70 ∗ /
71 p u b l i c f u n c t i o n s e t U r i ( $ u r i )
72 {73 i f ( i s s t r i n g ( $ u r i ) ) {74 $ t h i s−>CPSuri = $ u r i ;
75 } e l s e {76 th row new E x c e p t i o n ( ’O valor do p a r m e t r o uri deve ser string.
’ ) ;
77 }78 }79
80 /∗ ∗81 ∗ Re torna o v a l o r de CPSUri
82 ∗83 ∗ @access p u b l i c
84 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
85 ∗ @return s t r i n g o v a l o r de CPSUri
86 ∗ @throws E x c e p t i o n L a n a e x c e o quando
87 ∗ /
88 p u b l i c f u n c t i o n g e t U r i ( )
89 {90 i f ( i s s e t ( $ t h i s−>CPSuri ) ) {91 r e t u r n $ t h i s−>CPSuri ;
92 } e l s e {93 th row new E x c e p t i o n ( ’ERRO: CPSUri n o setado’ ) ;
94 }95 }96
97 } /∗ end o f c l a s s CPSUri ∗ /
98
99 ?>
167
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − c l a s s . Q u a l i f i e r . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 7 : 3 1
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ C l a s s e a b s t r a t a que r e p r e s e n t a o t i p o Q u a l i f i e r da RFC 3280 <br>
22 ∗23 ∗ Q u a l i f i e r em ASN . 1 : <br>
24 ∗ Q u a l i f i e r : := CHOICE {25 ∗ cP S u r i CPSuri ,
26 ∗ u s e r N o t i c e U s e r N o t i c e }27 ∗28 ∗ @abs t rac t
29 ∗ @access p u b l i c
30 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
31 ∗ /
32 a b s t r a c t c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y Q u a l i f i e r
33 {34
35 p r o t e c t e d $ p o l i c y Q u a l i f i e r I d ;
36
37 /∗ ∗38 ∗ Re torna o p o l i c y Q u a l i f i e r I d
39 ∗40 ∗ @access p u b l i c
41 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
168
42 ∗ @return O b j e c t I d e n t i f i e r o OID do p o l i c y Q u a l i f i e r I D
43 ∗ /
44 p u b l i c f u n c t i o n g e t P o l i c y Q u a l i f i e r I d ( )
45 {46 r e t u r n $ t h i s−>p o l i c y Q u a l i f i e r I d ;
47 }48
49 } /∗ end o f a b s t r a c t c l a s s Q u a l i f i e r ∗ /
50
51 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − c l a s s . U s e r N o t i c e . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 7 : 4 0
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ i n c l u d e Q u a l i f i e r
22 ∗23 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
24 ∗ /
25 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/Policy/Qualifier.php’
) ;
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/ObjectIdentifierFactory.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e que r e p r e s e n t a o t i p o u s e r N o t i c e da RFC3280 :
30 ∗31 ∗ @access p u b l i c
169
32 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
33 ∗ /
34 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y U s e r N o t i c e
35 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y Q u a l i f i e r
36 {37 p r i v a t e $ u s e r N o t i c e ;
38
39 /∗ ∗40 ∗ C o n s t r u t o r que s e t a o p o l i c y Q u a l i f i e r I D
41 ∗42 ∗ @access p u b l i c
43 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
44 ∗ @param s t r i n g o t e x t o a s e t a r . P a r m e t r o o p c i o n a l
45 ∗ @return v o i d
46 ∗ @throws E x c e p t i o n Quando o p a r m e t r o o p c i o n a l do c o n s t r u t o r n o
f o r uma s t r i n g
47 ∗ /
48 p u b l i c f u n c t i o n c o n s t r u c t ( $ t e x t = n u l l )
49 {50 / / s e t a o p o l i c y Q u a l i f i e r I D
51 $oIDFa c to ry = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
52 $ t h i s−>p o l i c y Q u a l i f i e r I d = $oIDFac tory−>g e t O b j e c t I d e n t i f i e r ( ’
1.3.6.1.5.5.7.2.2’ ) ;
53
54 i f ( $ t e x t != n u l l ) {55 $ t h i s−>s e t T e x t ( $ t e x t ) ;
56 }57 }58
59 /∗ ∗60 ∗ A d i c i o n a uma d e s c r i o ao u s e r N o t i c e
61 ∗62 ∗ @access p u b l i c
63 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
64 ∗ @param s t r i n g o t e x t o a s e t a r
65 ∗ @return v o i d
66 ∗ @throws E x c e p t i o n Quando o p a r m e t r o t e x t n o f o r uma s t r i n g
67 ∗ /
68 p u b l i c f u n c t i o n s e t T e x t ( $ t e x t )
69 {70 i f ( i s s t r i n g ( $ t e x t ) ) {71 $ t h i s−>u s e r N o t i c e = $ t e x t ;
170
72 } e l s e {73 th row new E x c e p t i o n ( ’ P a r m e t r o text de userNotice DEVE ser
string.’ ) ;
74 }75 }76
77 /∗ ∗78 ∗ Re torna o t e x t o de u s e r N o t i c e
79 ∗80 ∗ @access p u b l i c
81 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
82 ∗ @return s t r i n g o t e x t o em u s e r N o t i c e
83 ∗ @throws E x c e p t i o n Se o u s e r N o t i c e n o e s t i v e r s e t a d o .
84 ∗ /
85 p u b l i c f u n c t i o n g e t T e x t ( )
86 {87 i f ( i s s e t ( $ t h i s−>u s e r N o t i c e ) ) {88 r e t u r n $ t h i s−>u s e r N o t i c e ;
89 } e l s e {90 th row new E x c e p t i o n ( ’ERRO: UserNotice n o setado.’ ) ;
91 }92 }93
94
95
96 } /∗ end o f c l a s s U s e r N o t i c e ∗ /
97
98 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . Ex t endedKeyUsageEx tens ion . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 5 : 3 6
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
171
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ i n c l u i E x t e n s i o n
22 ∗23 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
24 ∗ /
25 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension.php’ ) ;
26
27 /∗ ∗28 ∗ I n t e r f a c e que imp lemen ta a e x t e n s o KeyUsage <br>
29 ∗30 ∗ A e x t e n s o em f o r m a t o ASN . 1 : <br>
31 ∗ ExtKeyUsageSyn tax : := SEQUENCE SIZE ( 1 . . MAX) OF KeyPurposeId <br>
32 ∗33 ∗ KeyPurposeId : := OBJECT IDENTIFIER
34 ∗35 ∗ @access p u b l i c
36 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
37 ∗ /
38 a b s t r a c t c l a s s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n E x t e n d e d K e y U s a g e E x t e n s i o n
39 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
40 {41 /∗ ∗42 ∗ A d i c i o n a um KeyPurposeId
43 ∗44 ∗ @access p u b l i c
45 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
46 ∗ @param O b j e c t I d e n t i f i e r o k e y P u r p o s e I d a s e r a d i c i o n a d o
47 ∗ @return v o i d
48 ∗ /
49 p u b l i c a b s t r a c t f u n c t i o n addUsage (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id ) ;
50
51 /∗ ∗52 ∗ Re torna uma l i s t a com os KeyPurpose
53 ∗54 ∗ @access p u b l i c
55 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
172
56 ∗ @return a r r a y a r r a y c o n t e n d o em cada l i n h a um OID r e p r e s e n t a n d o o
KeyPurpose
57 ∗ /
58 p u b l i c a b s t r a c t f u n c t i o n g e t U s a g e s ( ) ;
59
60 } /∗ end o f i n t e r f a c e Ex t endedKeyUsageEx tens ion ∗ /
61
62 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ t e s t e − c l a s s . O b j e c t I d e n t i f i e r . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f t e s t e .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ C l a s s e r e s p o n s v e l p e l o s O b j e c t s IDs
22 ∗23 ∗ @access p u b l i c
24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r
27 {28
29 p r i v a t e $ i d ;
30
31 /∗ ∗32 ∗ S e t a o ID do O bj e to
33 ∗34 ∗ @access p u b l i c
173
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ @param s t r i n g ID do Ob je to
37 ∗ @return v o i d
38 ∗ /
39 p u b l i c f u n c t i o n setOID ( $o id )
40 {41 $ t h i s−>i d = ( s t r i n g ) $o id ;
42 }43
44 /∗ ∗45 ∗ Re torna o ID do O bj e t o
46 ∗47 ∗ @access p u b l i c
48 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
49 ∗ @return s t r i n g ID do Obj e t o
50 ∗ /
51 p u b l i c f u n c t i o n getOID ( )
52 {53 r e t u r n $ t h i s−>i d ;
54 }55
56 } /∗ end o f c l a s s O b j e c t I d e n t i f i e r ∗ /
57
58 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3 / / TODO v e r i f i c a r d o c u m e n t a o dos th r ows da e x c p t i o n s
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . C e r t i f i c a t e . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 9 : 2 8
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }
174
19
20 /∗ ∗21 ∗ I n t e r f a c e que r e p r e s e n t a um C e r t i f i c a d o X . 5 0 9
22 ∗23 ∗ @access p u b l i c
24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 i n t e r f a c e L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e
27 {28
29 /∗ ∗30 ∗ C o n s t r u t o r
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ @param v o i d os ”dados” do c e r t i f i c a d o
35 ∗ @param s t r i n g o f o r m a t o do dados (PEM ou DER) . P a r m e t r o o p c i o n a l ,
o
36 ∗ d e f a u l t PEM
37 ∗ @return v o i d
38 ∗ /
39 p u b l i c f u n c t i o n c o n s t r u c t ( $da ta , $ t y p e = ’PEM’ ) ;
40
41 /∗ ∗42 ∗ Re torna o c e r t i f i c a d o em f o r m a t o PEM
43 ∗44 ∗ @access p u b l i c
45 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
46 ∗ @return s t r i n g o c e r t i f i c a d o em f o r m a t o PEM
47 ∗ /
48 p u b l i c f u n c t i o n getPem ( ) ;
49
50 /∗ ∗51 ∗ Re torna o c e r t i f i c a d o em f o r m a t o DER
52 ∗53 ∗ @access p u b l i c
54 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
55 ∗ @return v o i d o c e r t i f i c a d o em f o r m a t o DER
56 ∗ /
57 p u b l i c f u n c t i o n ge tD e r ( ) ;
58
59 /∗ ∗60 ∗ Re torna o s u b j e c t do c e r t i f i c a d o
175
61 ∗62 ∗ @access p u b l i c
63 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
64 ∗ @return RDNSequence o s u j e i t o do c e r t i f i c a d o
65 ∗ /
66 p u b l i c f u n c t i o n g e t S u b j e c t ( ) ;
67
68 /∗ ∗69 ∗ Re torna o i s s u e r do c e r t i f i c a d o
70 ∗71 ∗ @access p u b l i c
72 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
73 ∗ @return RDNSequence o e m i s s o r do c e r t i f i c a d o
74 ∗ /
75 p u b l i c f u n c t i o n g e t I s s u e r ( ) ;
76
77 /∗ ∗78 ∗ Re torna o s e r i a l N u m b e r do c e r t i f i c a d o
79 ∗80 ∗ @access p u b l i c
81 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
82 ∗ @return s t r i n g o n m e r o s e r i a l do c e r t i f i c a d o
83 ∗ /
84 p u b l i c f u n c t i o n g e t S e r i a l N u m b e r ( ) ;
85
86 /∗ ∗87 ∗ Re torna o a l g o r i t m o que hash u t i l i z a d o
88 ∗89 ∗ @access p u b l i c
90 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
91 ∗ @return s t r i n g o a l g o r i t m o de hash
92 ∗ /
93 p u b l i c f u n c t i o n g e t M e s s a g e D i g e s t A l g o r i t h m ( ) ;
94
95 /∗ ∗96 ∗ Re torna o n o t B e f o r e do c e r t i f i c a d o
97 ∗98 ∗ @access p u b l i c
99 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
100 ∗ @return Zend Date a da ta de v a l i d a d e f i n a l do c e r t i f i c a d o
101 ∗ /
102 p u b l i c f u n c t i o n g e t N o t B e f o r e ( ) ;
103
176
104 /∗ ∗105 ∗ Re torna o n o t A f t e r do c e r t i f i c a d o
106 ∗107 ∗ @access p u b l i c
108 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
109 ∗ @return Zend Date a da ta de v a l i d a d e i n i c i a l do c e r t i f i c a d o
110 ∗ /
111 p u b l i c f u n c t i o n g e t N o t A f t e r ( ) ;
112
113 /∗ ∗114 ∗ Re torna a v e r s o do c e r t i f i c a d o
115 ∗116 ∗ @access p u b l i c
117 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
118 ∗ @return i n t a v e r s o do c e r t i f i c a d o
119 ∗ /
120 p u b l i c f u n c t i o n g e t V e r s i o n ( ) ;
121
122 /∗ ∗123 ∗ Re torna a p u b l i c K e y do c e r t i f i c a d o
124 ∗125 ∗ @access p u b l i c
126 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
127 ∗ @return mixed a chave p b l i c a do c e r t i f i c a d o
128 ∗ /
129 p u b l i c f u n c t i o n g e t P u b l i c K e y ( ) ;
130
131 /∗ ∗132 ∗ V e r i f i c a a a s s i n a t u r a
133 ∗134 ∗ @access p u b l i c
135 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
136 ∗ @return boo lean TRUE se a a s s i n a t u r a f o r v l i d a , FALSE caso
c o n t r r i o
137 ∗ /
138 p u b l i c f u n c t i o n v e r i f y S i g n a t u r e (
L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e $ i s s u e r ) ;
139
140 /∗ ∗141 ∗ Re torna uma l i s t a de e x t e n s e s do c e r t i f i c a d o
142 ∗143 ∗ @access p u b l i c
144 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
177
145 ∗ @return a r r a y uma a r r a y c o n t e n d o em cada l i n h a uma e x t e n s o do
c e r t i f i c a d o
146 ∗ /
147 p u b l i c f u n c t i o n g e t E x t e n s i o n s ( ) ;
148
149 /∗ ∗150 ∗ Re torna uma e x t e n s o e s p e c f i c a do c e r t i f i c a d o
151 ∗152 ∗ @access p u b l i c
153 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
154 ∗ @param O b j e c t I d e n t i f i e r o OID da e x t e n s o a s e r r e t o r n a d a
155 ∗ @return E x t e n s i o n a e x t e n s o s o l i c i t a d a .
156 ∗ /
157 p u b l i c f u n c t i o n g e t E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id ) ;
158
159 /∗ ∗160 ∗ Re torna o F i n g e r P r i n t do c e r t i f i c a d o
161 ∗162 ∗ @access p u b l i c
163 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
164 ∗ @param i n t o a l g o r i t m o de hash
165 ∗ @return s t r i n g a ” i m p r e s s o d i g i t a l ” do c e r t i f i c a d o
166 ∗ /
167 p u b l i c f u n c t i o n g e t F i n g e r p r i n t ( $ a l g o r i t h m ) ;
168
169 /∗ ∗170 ∗ Re torna as e x t e n s e s d e s c o n h e c i d a s
171 ∗172 ∗ @access p u b l i c
173 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
174 ∗ @return a r r a y uma a r r a y c o n t e n d o em cada l i n h a uma UnknownExtens ion
175 ∗ /
176 p u b l i c f u n c t i o n ge tUnknownExtens ions ( ) ;
177
178
179 /∗ ∗180 ∗ Re torna P u b l i c K e y I n f o
181 ∗182 ∗ @access p u b l i c
183 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
184 ∗ @return a r r a y o P u b l i c K e y I n f o do c e r t i f i c a d o
185 ∗ /
178
186 p u b l i c f u n c t i o n g e t P u b l i c K e y I n f o ( ) ;
187
188 } /∗ end o f i n t e r f a c e C e r t i f i c a t e ∗ /
189
190 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ t e s t e − c l a s s . E x t e n s i o n . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f t e s t e .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ C l a s s e das e x t e n s e s do c e r t i f i c a d o .
22 ∗23 ∗ Segundo a RFC , o ASN . 1 de uma e x t e n s o d e f i n i d o como : <br>
24 ∗ E x t e n s i o n : := SEQUENCE { <br>
25 ∗ ex t n I D OBJECT IDENTIFIER , <br>
26 ∗ c r i t i c a l BOOLEAN DEFAULT FALSE , <br>
27 ∗ e x t n V a l u e OCTET STRING } <br>
28 ∗29 ∗ @access p u b l i c
30 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
31 ∗ /
32 a b s t r a c t c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
33 {34 p r o t e c t e d $ex tnID ;
35
36 p r o t e c t e d $ c r i t i c a l = FALSE ;
37
179
38 /∗ ∗39 ∗ C o n s t r u t o r . Cada E x t e n s o deve d e f i n i r o OID no c o n s t r u t o r
40 ∗ /
41 p u b l i c a b s t r a c t f u n c t i o n c o n s t r u c t ( ) ;
42
43 /∗ ∗44 ∗ Re torna o v a l o r da e x t e n s o
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @return s t r i n g o v a l o r
49 ∗ /
50 p u b l i c a b s t r a c t f u n c t i o n g e t V a l u e ( ) ;
51 / / TODO i m p l e m e n t a r m t o d o g e t V a l u e em t o d a s as e x t e n s e s
52
53 /∗ ∗54 ∗ Re torna o v a l o r da e x t e n s o em base 64
55 ∗56 ∗ @access p u b l i c
57 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
58 ∗ @return s t r i n g o v a l o r
59 ∗ /
60 p u b l i c a b s t r a c t f u n c t i o n ge tBase64Va lue ( ) ;
61 / / TODO i m p l e m e n t a r m t o d o g e t B a s e 6 4 V a l u e em t o d a s as e x t e n s e s
62
63 /∗ ∗64 ∗ Re torna o e x tn ID da e x t e n s o
65 ∗66 ∗ @access p u b l i c
67 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
68 ∗ @return O b j e c t I d e n t i f i e r O ex t n I D da E x t e n s o
69 ∗ /
70 p u b l i c f u n c t i o n g e t O i d ( )
71 {72 r e t u r n $ t h i s−>extnID−>ge tO id ( ) ;
73 }74
75 /∗ ∗76 ∗ V e r i f i c a se a e x t e n s o CRITICAL
77 ∗78 ∗ @access p u b l i c
79 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
180
80 ∗ @return boo lean TRUE se a e x t e n s o CRITICAL , caso c o n t r r i o
FALSE
81 ∗ /
82 p u b l i c f u n c t i o n i s C r i t i c a l ( )
83 {84 r e t u r n ( boo l ) $ t h i s−> c r i t i c a l ;
85 }86
87 /∗ ∗88 ∗ S e t a o v a l o r CRITICAL da e x t e n s o
89 ∗90 ∗ @access p u b l i c
91 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
92 ∗ @param boo lean Valor a s e r s e t a d o em CRITICAL
93 ∗ @return v o i d
94 ∗ /
95 p u b l i c f u n c t i o n s e t C r i t i c a l ( $ c r i t i c a l )
96 {97 $ t h i s−> c r i t i c a l = $ c r i t i c a l ;
98 }99
100 } /∗ end o f c l a s s E x t e n s i o n ∗ /
101
102 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . C e r t i f i c a t e R e v o c a t i o n L i s t B u i l d e r . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 6 : 5 8 : 5 6
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }
181
19
20 /∗ ∗21 ∗ O B u i l d e r da c l a s s e C e r t i f i c a t e R e v o g a t i o n L i s t , que r e p r e s e n t a uma LCR
22 ∗ ( L i s t a de C e r t i f i c a d o s Revogados )
23 ∗24 ∗ @access p u b l i c
25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 i n t e r f a c e L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e R e v o c a t i o n L i s t B u i l d e r
28 {29 /∗ ∗30 ∗ C o n s t r u t o r
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ @return v o i d
35 ∗ /
36 p u b l i c f u n c t i o n c o n s t r u c t ( ) ;
37
38 /∗ ∗39 ∗ S e t a o e m i s s o r da CRL
40 ∗41 ∗ @access p u b l i c
42 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
43 ∗ @param RDNSequence o e m i s s o r
44 ∗ @return v o i d
45 ∗ /
46 p u b l i c f u n c t i o n s e t I s s u e r (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e $ i s s u e r ) ;
47
48 /∗ ∗49 ∗ S e t a a d a ta de e m i s s o da CRL
50 ∗51 ∗ @access p u b l i c
52 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
53 ∗ @param Zend Date a da ta de e m i s s o da CRL
54 ∗ @return v o i d
55 ∗ /
56 p u b l i c f u n c t i o n s e t T h i s U p d a t e ( Zend Date $ d a t e ) ;
57
58
59 /∗ ∗60 ∗ S e t a a d a ta de e m i s s o da p r x i m a CRL
182
61 ∗62 ∗ @access p u b l i c
63 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
64 ∗ @param Zend Date a da ta de e m i s s o da p r x i m a CRL ( da ta de
v a l i d a d e ) .
65 ∗ @return v o i d
66 ∗ /
67 p u b l i c f u n c t i o n s e t N e x t U p d a t e ( Zend Date $ d a t e ) ;
68
69
70 /∗ ∗71 ∗ S e t a o n m e r i o s e r i a l
72 ∗73 ∗ @access p u b l i c
74 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
75 ∗ @param s t r i n g o n m e r o s e r i a l da CRL .
76 ∗ @return v o i d
77 ∗ /
78 p u b l i c f u n c t i o n s e t S e r i a l ( $ s e r i a l ) ;
79
80 /∗ ∗81 ∗ A d i c i o n a uma e n t r a d a na CRL
82 ∗83 ∗ @access p u b l i c
84 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
85 ∗ @param CRLEntry a e n t r a d a a a d i c i o n a r
86 ∗ @return v o i d
87 ∗ /
88 p u b l i c f u n c t i o n addCRLEntry ( L a b s e c S e c u r i t y C e r t i f i c a t i o n C R L C R L E n t r y
$ c r l E n t r y ) ;
89
90 /∗ ∗91 ∗ A s s i n a os dados , e r e t o r n a uma CRL
92 ∗93 ∗ @access p u b l i c
94 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
95 ∗ @param s t r i n g a chave p r i v a d a
96 ∗ @param s t r i n g o a l g o r i t m o de hash
97 ∗ @return C e r t i f i c a t e R e v o c a t i o n L i s t argumentos e x t r a s
98 ∗ /
99 p u b l i c f u n c t i o n s i g n ( $privKey , $hashAlgor i thm , $ e x t r a A r g s = n u l l ) ;
100
101 /∗ ∗
183
102 ∗ A d i c i o n a uma e x t e n s o CRL
103 ∗104 ∗ @access p u b l i c
105 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
106 ∗ @param E x t e n s i o n E x t e n s o a d i c i o n a r
107 ∗ @return v o i d
108 ∗ /
109 p u b l i c f u n c t i o n a d d E x t e n s i o n ( L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
$ e x t e n s i o n ) ;
110
111 /∗ ∗112 ∗ A d i c i o n a v r i a s e x t e n s e s CRL
113 ∗114 ∗ @access p u b l i c
115 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
116 ∗ @param a r r a y uma a r r a y c o n t e n d o em cada l i n h a uma e x t e n s o
117 ∗ @return v o i d
118 ∗ /
119 p u b l i c f u n c t i o n a d d E x t e n s i o n s ( $ e x t e n s i o n s ) ;
120
121 } /∗ end o f i n t e r f a c e C e r t i f i c a t e R e v o c a t i o n L i s t B u i l d e r ∗ /
122
123 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − i n t e r f a c e . CRLEntry . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 6 : 5 9 : 3 6
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }
184
20
21 r e q u i r e o n c e ( "Labsec/Security/Certification/ObjectIdentifier.php" ) ;
22 r e q u i r e o n c e ( "Labsec/Security/Certification/Extension.php" ) ;
23
24 /∗ ∗25 ∗ I n t e r f a c e que r e f r e s e n t a cada uma das e n t r a d a s de uma L i s t a de
C e r t i f i c a d o s Revogados (LCR)
26 ∗27 ∗ @access p u b l i c
28 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
29 ∗ /
30 i n t e r f a c e L a b s e c S e c u r i t y C e r t i f i c a t i o n C R L C R L E n t r y
31 {32 /∗ ∗33 ∗ Re torna o n m e r o s e r i a l do c e r t i f i c a d o revogado ( que e s t na
CRL) .
34 ∗35 ∗ @access p u b l i c
36 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
37 ∗ @return s t r i n g o n m e r o s e r i a l do c e r t i f i c a d o
38 ∗ /
39 p u b l i c f u n c t i o n g e t S e r i a l N u m b e r ( ) ;
40
41 /∗ ∗42 ∗ Re torna a da ta de r e v o g a o do c e r t i f i c a d o .
43 ∗44 ∗ @access p u b l i c
45 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
46 ∗ @return Zend Date a da ta de r e v o g a o .
47 ∗ /
48 p u b l i c f u n c t i o n g e t R e v o c a t i o n D a t e ( ) ;
49
50 /∗ ∗51 ∗ Re torna as e x t e n s e s da e n t r a d a do c e r t i f i c a d o .
52 ∗53 ∗ @access p u b l i c
54 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
55 ∗ @return a r r a y Array c o n t e n d o em cada l i n h a uma e x t e n s o .
56 ∗ /
57 p u b l i c f u n c t i o n g e t E x t e n s i o n s ( ) ;
58
59 /∗ ∗60 ∗ Re torna uma e x t e n s o do c e r t i f i c a d o .
185
61 ∗62 ∗ @access p u b l i c
63 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
64 ∗ @param O b j e c t I d e n t i f i e r O OID da e x t e n s o a s e r r e t o r n a d a .
65 ∗ @return E x t e n s i o n A e x t e n s o r e q u i s i t a d a .
66 ∗ /
67 p u b l i c f u n c t i o n g e t E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id ) ;
68
69 /∗ ∗70 ∗ Re torna as e x t e n s e s d e s c o n h e c i d a s .
71 ∗72 ∗ @access p u b l i c
73 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
74 ∗ @return a r r a y Uma a r r a y de E x t e n s i o n , c o n t e n d o as e x t e n s e s
d e s c o n h e c i d a s .
75 ∗ /
76 p u b l i c f u n c t i o n ge tUnknownExtens ions ( ) ;
77
78 /∗ ∗79 ∗ S e t a o n m e r o s e r i a l da e n t r a d a ”X” da CRL .
80 ∗81 ∗ @access p u b l i c
82 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
83 ∗ @param s t r i n g o n m e r o s e r i a l .
84 ∗ @return v o i d
85 ∗ /
86 p u b l i c f u n c t i o n s e t S e r i a l N u m v e r ( $ s e r i a l ) ;
87
88 /∗ ∗89 ∗ A d i c i o n a e x t e n s o e n t r a d a ”X” da CRL .
90 ∗91 ∗ @access p u b l i c
92 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
93 ∗ @param E x t e n s i o n E x t e n s o a a d i c i o n a r
94 ∗ @return v o i d
95 ∗ /
96 p u b l i c f u n c t i o n a d d E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n $ e x t e n s i o n ) ;
97
98 /∗ ∗99 ∗ S e t a a da ta de r e v o g a o .
100 ∗
186
101 ∗ @access p u b l i c
102 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
103 ∗ @param Zend Date da ta de r e v o g a o .
104 ∗ @return v o i d
105 ∗ /
106 p u b l i c f u n c t i o n s e t R e v o c a t i o n D a t e ( Zend Date $ d a t e ) ;
107
108 /∗ ∗109 ∗ Re torna a e n t r a d a da CRL em f o r m a t o PEM
110 ∗111 ∗ @access p u b l i c
112 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
113 ∗ @return var a e n t r a d a da CRL em f o r m a t o PEM
114 ∗ /
115 p u b l i c f u n c t i o n getPEM ( ) ;
116
117 /∗ ∗118 ∗ Re torna a e n t r a d a da CRL em f o r m a t o DER
119 ∗120 ∗ @access p u b l i c
121 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
122 ∗ @return var a e n t r a d a da CRL em f o r m a t o DER
123 ∗ /
124 p u b l i c f u n c t i o n getDER ( ) ;
125
126
127 } /∗ end o f i n t e r f a c e CRLEntry ∗ /
128
129 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − c l a s s . D i s t r i b u t i o n P o i n t . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 7 . 0 8 . 2 0 0 7 , 1 8 : 3 5 : 1 4
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
187
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ C l a s s e que r e p r e s e n t a o t i p o D i s t r i b u t i o n P o i n t <br>
22 ∗23 ∗ D i s t r i b u t i o n P o i n t em f o r m a t ASN . 1 : <br>
24 ∗ D i s t r i b u t i o n P o i n t : := SEQUENCE { <br>
25 ∗ d i s t r i b u t i o n P o i n t [ 0 ] D i s t r i b u t i o n P o i n t N a m e OPTIONAL , <
br>
26 ∗ r e a s o n s [ 1 ] ReasonFlags OPTIONAL , <br>
27 ∗ c R L I s s u e r [ 2 ] GeneralNames OPTIONAL } <br>
28 ∗29 ∗ D i s t r i b u t i o n P o i n t N a m e : := CHOICE { <br>
30 ∗ f u l lN a m e [ 0 ] GeneralNames , <br>
31 ∗ n a m e R e l a t i v e T o CR L I s s u e r [ 1 ] R e l a t i v e D i s t i n g u i s h e d N a m e } <br>
32 ∗33 ∗ ReasonFlags : := BIT STRING { <br>
34 ∗ unused ( 0 ) , <br>
35 ∗ keyCompromise ( 1 ) , <br>
36 ∗ cACompromise ( 2 ) , <br>
37 ∗ a f f i l i a t i o n C h a n g e d ( 3 ) , <br>
38 ∗ s u p e r s e d e d ( 4 ) , <br>
39 ∗ c e s s a t i o n O f O p e r a t i o n ( 5 ) , <br>
40 ∗ c e r t i f i c a t e H o l d ( 6 ) , <br>
41 ∗ p r i v i l e g e W i t h d r a w n ( 7 ) , <br>
42 ∗ aACompromise ( 8 ) } <br>
43 ∗44 ∗ @access p u b l i c
45 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
46 ∗ /
47 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n C R L D i s t r i b u t i o n P o i n t
48 {49 c o n s t UNUSED = 0 ;
50 c o n s t KEY COMPROMISE = 1 ;
51 c o n s t C ACOMPROMISE = 2 ;
52 c o n s t AFFILIATION CHANGED = 3 ;
53 c o n s t SUPERSEDED = 4 ;
54 c o n s t CESSATION OF OPERATION = 5 ;
55 c o n s t CERTIFICATE HOLD = 6 ;
188
56 c o n s t PRIVILEGE WITHDRAW = 7 ;
57 c o n s t A ACOMPROMISE = 8 ;
58
59 p r i v a t e $ i s s u e r ;
60
61 p r i v a t e $ r e a s o n F l a g s = array ( ) ;
62
63 p r i v a t e $ u r i = ’’ ;
64
65 /∗ ∗66 ∗ C o n s t r u t o r .
67 ∗68 ∗ @access p u b l i c
69 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
70 ∗ @param s t r i n g URI
71 ∗ @param RDNSequence
72 ∗ @param a r r a y As r e a s o n F l a g s
73 ∗ @return v o i d
74 ∗75 ∗ @throws E x c e p t i o n Quando os p a r m e t r o s u r i e i s s u e r forem n u l o s .
76 ∗ ( A RFC p r o i b e i s t o )
77 ∗78 ∗ @throws E x c e p t i o n Quando o p a r m e t r o r e s o n F l a g s n o f o r uma a r r a y
79 ∗80 ∗ @throws E x c e p t i o n Quando o a r r a y do p a r m e t r o r e s o n F l a g s c o n t i v e r
81 ∗ v a l o r e s que n o s o b o o l e a n o s .
82 ∗83 ∗ @throws E x c e p t i o n Quando o tamanho do a r r a y do p a r m e t r o r e s o n F l a g s
84 ∗ f o r maior que 9 .
85 ∗86 ∗ /
87 p u b l i c f u n c t i o n c o n s t r u c t ( $ u r i = ’’ ,
88 L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e $ i s s u e r = n u l l ,
$ r e a s o n F l a g s = n u l l )
89 {90 i f ( $ u r i != ’’ ) {91 $ t h i s−>u r i = $ u r i ;
92 }93
94 i f ( $ r e a s o n F l a g s != n u l l ) {95
96 i f ( i s a r r a y ( $ r e a s o n F l a g s ) ) {97
189
98 i f ( count ( $ r e a s o n F l a g s ) <= 9) {99
100 foreach ( $ r e a s o n F l a g s as $ v a l u e ) {101 i f ( ! i s b o o l ( $ v a l u e ) ) {102 th row new E x c e p t i o n ( ’O p a r m e t r o reasonFlags
DEVE conter
103 somente valores booleanos’ ) ;
104 }105 }106
107 $ t h i s−>r e a s o n F l a g s = $ r e a s o n F l a g s ;
108
109 } e l s e {110 th row new E x c e p t i o n ( ’O p a r m e t r o reasonFlags DEVE ser
uma array com no m x i m o
111 9 elementos booleanos’ ) ;
112 }113
114 } e l s e {115 th row new E x c e p t i o n ( ’O p a r m e t r o reasonFlags DEVE ser uma
array’ ) ;
116 }117
118 }119
120 i f ( $ i s s u e r != n u l l ) {121 $ t h i s−> i s s u e r = $ i s s u e r ;
122 } e l s e {123 $ t h i s−> i s s u e r = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e ( ) ;
124 }125
126 i f ( $ u r i == ’’ && $ i s s u e r == NULL) {127 th row new E x c e p t i o n ( "OU o p a r m e t r o uri, OU o p a r m e t r o
issuer deve ser
128 informado no construtor do DistributionPoint" ) ;
129 }130 }131
132 /∗ ∗133 ∗ Re torna o I s s u e r
134 ∗135 ∗ @access p u b l i c
190
136 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
137 ∗ @return RDNSequence o i s s u e r
138 ∗ /
139 p u b l i c f u n c t i o n g e t I s s u e r ( )
140 {141 r e t u r n $ t h i s−> i s s u e r ;
142 }143
144 /∗ ∗145 ∗ Re torna a a r r a y de boolean , c o n t e n d o os r e a s o n F l a g s
146 ∗147 ∗ @access p u b l i c
148 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
149 ∗ @return a r r a y a r r a y de boo lean dos r e a s o n F l a g s
150 ∗ /
151 p u b l i c f u n c t i o n g e t R e a s o n F l a g s ( )
152 {153 r e t u r n $ t h i s−>r e a s o n F l a g s ;
154 }155
156 /∗ ∗157 ∗ Re torna a URI
158 ∗159 ∗ @access p u b l i c
160 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
161 ∗ @return s t r i n g a u r i
162 ∗ /
163 p u b l i c f u n c t i o n g e t U r i ( )
164 {165 r e t u r n $ t h i s−>u r i ;
166 }167
168 /∗ ∗169 ∗ A d i c i o n a um ReasonFlag .
170 ∗171 ∗ @access p u b l i c
172 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
173 ∗ @param i n t Uma c o n s t a n t e de c l a s s e i n d i c a n d o o ReasonFlag
174 ∗ @param boo lean E s t e p a r m e t r o o p c i o n a r l . Se e s t e p a r m e t r o
175 ∗ f o r passado , o v a l o r do p a r a m e t r o s e r s e t a d o na r e s p e c t i v a
176 ∗ ReasonFlag . O D e f a u l t TRUE .
177 ∗ @return v o i d
178 ∗ @throws E x c e p t i o n Quando o p a r m e t r o v a l u e f o r e s p e c i f i c a d o , e
191
179 ∗ o v a l o r e s p e c i f i c a d o n o f o r boo leano
180 ∗ /
181 p u b l i c f u n c t i o n addReasonFlag ( $ f l a g , $ v a l u e = TRUE)
182 {183 i f ( ( $ f l a g <= 8) && ( $ f l a g >= 0) ) {184 i f ( i s b o o l ( $ v a l u e ) ) {185 $ t h i s−>r e a s o n F l a g s [ $ f l a g ] = $ v a l u e ;
186
187 } e l s e {188 th row new E x c e p t i o n ( ’ P a r m e t r o value DEVE ser booleano.’ ) ;
189 }190 } e l s e {191 th row new E x c e p t i o n ( ’ P a r m e t r o flag deve estar entre 0 e 8.
192 Utilize as constantes de classe para este p a r m e t r o ’ ) ;
193 }194 }195
196 } /∗ end o f c l a s s D i s t r i b u t i o n P o i n t ∗ /
197
198 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ t e s t e − c l a s s . O b j e c t I d e n t i f i e r F a c t o r y . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f t e s t e .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 r e q u i r e o n c e ’Labsec/Security/Certification/ObjectIdentifier.php’ ;
21
22 /∗ ∗
192
23 ∗ C l a s s e que u t i l i z a o p a d r o de p r o j e t o Fac tory , para c r i a r O b j e c t s IDs
24 ∗25 ∗ @access p u b l i c
26 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
27 ∗ /
28 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y {29
30 c o n s t EXTENSION AUTHORITY KEY IDENTIFIER = 1 ;
31
32 c o n s t EXTENSION SUBJECT KEY IDENTIFIER = 2 ;
33
34 c o n s t EXTENSION KEY USAGE = 3 ;
35
36 c o n s t EXTENSION CERTIFICATE POLICIES = 4 ;
37
38 c o n s t DATA TYPE CPS QUALIFIER = 5 ;
39
40 c o n s t DATA TYPE USER NOTICE = 6 ;
41
42 c o n s t EXTENSION PRIVATE KEY USAGE PERIOD = 7 ;
43
44 c o n s t EXTENSION SUBJECT ALTERNATIVE NAME = 8 ;
45
46 c o n s t EXTENSION BASIC CONSTRAINTS = 9 ;
47
48 c o n s t EXTENSION EXTENDED KEY USAGE = 1 0 ;
49
50 c o n s t KEY USAGE SERVER AUTH = 1 1 ;
51
52 c o n s t KEY USAGE CLIENT AUTH = 1 2 ;
53
54 c o n s t KEY USAGE CODE SIGNING = 1 3 ;
55
56 c o n s t KEY USAGE EMAIL PROTECTION = 1 4 ;
57
58 c o n s t KEY USAGE TIME STAMPING = 1 5 ;
59
60 c o n s t KEY USAGE OCSP SIGNING = 1 6 ;
61
62 c o n s t EXTENSION CRL DISTRIBUTION POINTS = 1 7 ;
63
64 c o n s t EXTENSION CRL NUMBER = 1 8 ;
65
193
66 c o n s t EXTENSION ISSUING DISTRIBUTION POINT = 1 9 ;
67
68 c o n s t EXTENSION REASON CODE = 2 0 ;
69
70 c o n s t EXTENSION CERTIFICATE ISSUER = 2 1 ;
71
72 /∗ ∗73 ∗ Re torna um O b j e c t I d e n t i f i e r a p a r t i r do c d i g o d e f i n i d o na ITU−T
74 ∗75 ∗ @access p u b l i c
76 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
77 ∗ @param s t r i n g C d i g o OID , segundo a ITU−T
78 ∗ @return O b j e c t I d e n t i f i e r O O b j e c t I d e n t i f i e r c o r r e s p o n d e n t e
79 ∗ @throws E x c e p t i o n O C d i g o OID n o c o n h e c i d o
80 ∗ /
81 p u b l i c s t a t i c f u n c t i o n g e t O b j e c t I d e n t i f i e r ( $o id ) {82 / / c r i a O b j e c t I d e n t i f i e r
83 $o = new L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r ( ) ;
84
85 $o−>setOID ( $o id ) ;
86
87 / / r e t o r n a O b j e c t I d e n t i f i e r c r i a d o .
88 r e t u r n $o ;
89 }90
91 /∗ ∗92 ∗ Re torna um O b j e c t I d e n t i f i e r a p a r t i r do c d i g o d e f i n i d o no SGCI
93 ∗94 ∗ @access p u b l i c
95 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
96 ∗ @param i n t C d i g o do OID , segundo o SGCI
97 ∗ @return O b j e c t I d e n t i f i e r O O b j e c t I d e n t i f i e r c o r r e s p o n d e n t e
98 ∗ @throws E x c e p t i o n O C d i g o OID n o c o n h e c i d o
99 ∗ /
100 p u b l i c s t a t i c f u n c t i o n g e t O b j e c t I d e n t i f i e r B y C o d e ( $code ) {101 / / c r i a O b j e c t I d e n t i f i e r
102 $o = new L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r ( ) ;
103
104 sw i t c h ( ( i n t ) $code ) {105 case 1 :
106 / / A u t h o r i t y Key I d e n t i f i e r E x t e n s i o n
107 $o−>setOID ( "2.5.29.35" ) ;
108 break ;
194
109
110 case 2 :
111 / / S u b j e c t Key I d e n t i f i e r E x t e n s i o n
112 $o−>setOID ( "2.5.29.14" ) ;
113 break ;
114
115
116 case 3 :
117 / / Key Usage E x t e n s i o n
118 $o−>setOID ( "2.5.29.15" ) ;
119 break ;
120
121 case 4 :
122 / / C e r t i f i c a t e P o l i c i e s E x t e n s i o n
123 $o−>setOID ( "2.5.29.32" ) ;
124 break ;
125
126 case 5 :
127 / / CPS q u a l i f i e r DataType
128 $o−>setOID ( "1.3.6.1.5.5.7.2.1" ) ;
129 break ;
130
131 case 6 :
132 / / U s e r N o t i c e q u a l i f i e r DataType
133 $o−>setOID ( "1.3.6.1.5.5.7.2.2" ) ;
134 break ;
135
136 case 7 :
137 / / P r i v a t e Key Usage P er io d E x t e n s i o n
138 $o−>setOID ( "2.5.29.16" ) ;
139 break ;
140
141 case 8 :
142 / / S u b j e c t A l t e r n a t i v e Name E x t e n s i o n
143 $o−>setOID ( "2.5.29.17" ) ;
144 break ;
145
146 case 9 :
147 / / B a s i c C o n s t r a i n t s E x t e n s i o n
148 $o−>setOID ( "2.5.29.19" ) ;
149 break ;
150
151 case 10 :
195
152 / / Ex tended Key Usage E x t e n s i o n
153 $o−>setOID ( "2.5.29.37" ) ;
154 break ;
155
156 case 11 :
157 / / Key usage i d k p s e r v e r A u t h
158 $o−>setOID ( "1.3.6.1.5.5.7.3.1" ) ;
159 break ;
160
161
162 case 12 :
163 / / Key usage i d k p c l i e n t A u t h
164 $o−>setOID ( "1.3.6.1.5.5.7.3.2" ) ;
165 break ;
166
167
168 case 13 :
169 / / Key usage i d k p c o d e S i g n i n g
170 $o−>setOID ( "1.3.6.1.5.5.7.3.3" ) ;
171 break ;
172
173
174 case 14 :
175 / / Key usage i d k p e m a i l P r o t e c t i o n
176 $o−>setOID ( "1.3.6.1.5.5.7.3.4" ) ;
177 break ;
178
179
180 case 15 :
181 / / Key usage i d k p t i m e S t a m p i n g
182 $o−>setOID ( "1.3.6.1.5.5.7.3.8" ) ;
183 break ;
184
185
186 case 16 :
187 / / Key usage OCSPSigning
188 $o−>setOID ( "1.3.6.1.5.5.7.3.9" ) ;
189 break ;
190
191
192 case 17 :
193 / / CRL D i s t r i b u t i o n P o i n t s E x t e n s i o n
194 $o−>setOID ( "2.5.29.31" ) ;
196
195 break ;
196
197
198 case 18 :
199 / / TODO v e r i f i c a r OID
200 / / CRL Number E x t e n s i o n
201 $o−>setOID ( "2.5.29.20" ) ;
202 break ;
203
204 case 19 :
205 / / I s s u i n g D i s t r i b u t i o n P o i n t E x t e n s i o n
206 $o−>setOID ( "2.5.29.28" ) ;
207 break ;
208
209 case 20 :
210 / / TODO v e r i f i c a r OID
211 / / Reason Code E x t e n s i o n
212 $o−>setOID ( "2.5.29.20" ) ;
213 break ;
214
215 case 21 :
216 / / C e r t i f i c a t e I s s u e r E x t e n s i o n
217 $o−>setOID ( "2.5.29.29" ) ;
218 break ;
219
220 d e f a u l t :
221 th row new E x c e p t i o n ( $code . " n o encontrado" ) ;
222 }223
224 / / r e t o r n a O b j e c t I d e n t i f i e r c r i a d o .
225 r e t u r n $o ;
226 }227
228 } /∗ end o f c l a s s O b j e c t I d e n t i f i e r F a c t o r y ∗ /
229 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − RFC822Name . php
7 ∗
197
8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i GeneralName
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralName.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e que r e p r e s e n t a o t i p o RFC822Name
30 ∗31 ∗ RFC822Name em f o r m a t o ASN . 1 : <br>
32 ∗ rfc822Name I A 5 S t r i n g <br>
33 ∗34 ∗ @access p u b l i c
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ /
37 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R F C 8 2 2 N a m e
38 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e
39 {40
41 p r i v a t e $rfc822Name ;
42
43 /∗ ∗44 ∗ S e t a o rfc822Name
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @param s t r i n g rfc822Name
49 ∗ @return v o i d
50 ∗ @except ion E x c e p t i o n Caso o t i p o n o f o r v l i d o
198
51 ∗ /
52 p u b l i c f u n c t i o n s e t V a l u e ( $rfc822Name )
53 {54 i f ( e r e g i ( ’^[^@ ]+\@[^@ ]+\.[A-Z]{2,3}$’ , $rfc822Name ) ) {55 $ t h i s−>rfc822Name = $rfc822Name ;
56 } e l s e {57 th row new E x c e p t i o n ( ’O p a r m e t r o rfc822Name informado
i n v l i d o .’ ) ;
58 }59 }60
61 /∗ ∗62 ∗ Re torna o v a l o r de rfc822Name
63 ∗64 ∗ @access p u b l i c
65 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
66 ∗ @return s t r i n g rfc822Name
67 ∗ /
68 p u b l i c f u n c t i o n g e t V a l u e ( )
69 {70 r e t u r n $ t h i s−>rfc822Name ;
71 }72
73 } /∗ end o f c l a s s RFC822Name ∗ /
74 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − DNSName . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {
199
18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i GeneralName
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralName.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e que r e p r e s e n t a o t i p o DNSName
30 ∗31 ∗ DNSName em f o r m a t o ASN . 1 : <br>
32 ∗ dNSName I A 5 S t r i n g <br>
33 ∗34 ∗ @access p u b l i c
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ /
37 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s D N S N a m e
38 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e
39 {40
41 p r i v a t e $dnsName = ’’ ;
42
43 /∗ ∗44 ∗ S e t a o DNSName
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @param s t r i n g o DNSName
49 ∗ @return v o i d
50 ∗ @except ion E x c e p t i o n Caso o t i p o n o f o r s t r i n g , d i s p a r a e x c e o
51 ∗ /
52 p u b l i c f u n c t i o n setDNSName ( $dnsName )
53 {54 i f ( i s s t r i n g ( $dnsName ) ) {55 $ t h i s−>dnsName = $dnsName ;
56 } e l s e {57 th row new E x c e p t i o n ( ’O DNSName informado na f u n o
58 setDNSName i n v l i d o .’ ) ;
59 }60 }
200
61
62 /∗ ∗63 ∗ Re torna o DNSName
64 ∗65 ∗ @access p u b l i c
66 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
67 ∗ @return s t r i n g DNSName
68 ∗ /
69 p u b l i c f u n c t i o n getDNSName ( )
70 {71 r e t u r n $ t h i s−>dnsName ;
72 }73
74 } /∗ end o f c l a s s DNSName ∗ /
75
76 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − GeneralNames . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralName.php’ ) ;
22
23 /∗ ∗24 ∗ C l a s s e que imp lemen ta o t i p o de dados GeneralNames da RFC 3280<br>
25 ∗26 ∗ GeneralNames em f o r m a t o ASN . 1 : <br>
201
27 ∗ GeneralNames : := SEQUENCE SIZE ( 1 . . MAX) OF GeneralName
28 ∗29 ∗ @access p u b l i c
30 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
31 ∗ /
32 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e s
33 {34 p r i v a t e $name = array ( ) ;
35
36 /∗ ∗37 ∗ A d i c i o n a um GeneralName
38 ∗39 ∗ @access p u b l i c
40 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
41 ∗ @param GeneralName GeneralName a a d i c i o n a r
42 ∗ @return v o i d
43 ∗ /
44 p u b l i c f u n c t i o n addGeneralName (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e $genera lName )
45 {46 $ t h i s−>name [ ] = $genera lName ;
47 }48
49 /∗ ∗50 ∗ Re torna o GeneralNames
51 ∗52 ∗ @access p u b l i c
53 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
54 ∗ @return a r r a y Uma a r r a y em que cada l i n h a um GeneralName
55 ∗ @except ion E x c e p t i o n Caso o GeneralNames n o t i v e r nenhum
GeneralName
56 ∗ /
57 p u b l i c f u n c t i o n ge tGenera lNames ( )
58 {59 i f ( s i z e o f ( $ t h i s−>name ) > 0) {60 r e t u r n $ t h i s−>name ;
61 } e l s e {62 th row new E x c e p t i o n ( ’Tamanho do GeneralNames menor do que 1.’ .
63 ’Verifique se foi adicionado pelo menos 1
GeneralName’ ) ;
64 }65 }66
202
67 } /∗ end o f c l a s s GeneralNames ∗ /
68
69 ?>
1 <?php
2 / / TODO NAO IMPLEMENTADO
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − X400Address . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i GeneralName
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralName.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e que r e p r e s e n t a o t i p o X400Address
30 ∗31 ∗ X400Address em f o r m a t o ASN . 1 : <br>
32 ∗ x400Address ORAddress<br>
33 ∗34 ∗ @access p u b l i c
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ /
37 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s X 4 0 0 A d d r e s s
38 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e
39 {
203
40
41 p r i v a t e $x400Address ;
42
43 /∗ ∗44 ∗ S e t a o x400Address
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @param s t r i n g x400Address
49 ∗ @return v o i d
50 ∗ @except ion E x c e p t i o n Se o t i p o f o r i n v l i d o
51 ∗ /
52 p u b l i c f u n c t i o n se tX400Address ( $x400Address )
53 {54 $ t h i s−>x400Address = $x400Address ;
55 }56
57 /∗ ∗58 ∗ Re torna o v a l o r de x400Address
59 ∗60 ∗ @access p u b l i c
61 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
62 ∗ @return x400Address
63 ∗ /
64 p u b l i c f u n c t i o n ge tX400Address ( )
65 {66 r e t u r n $ t h i s−>x400Address ;
67 }68
69 } /∗ end o f c l a s s X400Address ∗ /
70
71 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − U n i f o r m R e s o u r c e I d e n t i f i e r . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
204
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i GeneralName
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralName.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e que r e p r e s e n t a o t i p o U n i f o r m R e s o u r c e I d e n t i f i e r
30 ∗31 ∗ U n i f o r m R e s o u r c e I d e n t i f i e r em f o r m a t o ASN . 1 : <br>
32 ∗ u n i f o r m R e s o u r c e I d e n t i f i e r I A 5 S t r i n g <br>
33 ∗34 ∗ @access p u b l i c
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ /
37 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s U n i f o r m R e s o u r c e I d e n t i f i e r
38 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e
39 {40
41 p r i v a t e $ u r i ;
42
43 /∗ ∗44 ∗ S e t a o u n i f o r m R e s o u r c e I d e n t i f i e r
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @param s t r i n g u r i
49 ∗ @return v o i d
50 ∗ @except ion E x c e p t i o n Se o t i p o do p a r m e t r o u r i n o f o r s t r i n g
51 ∗ /
52 p u b l i c f u n c t i o n se tURI ( $ u r i )
53 {
205
54 i f ( i s s t r i n g ( $ u r i ) ) {55 $ t h i s−>u r i = $ u r i ;
56 } e l s e {57 th row new E x c e p t i o n ( ’O p a r m e t r o URI informado
i n v l i d o .’ ) ;
58 }59 }60
61 /∗ ∗62 ∗ Re torna o v a l o r de u n i f o r m R e s o u r c e I d e n t i f i e r
63 ∗64 ∗ @access p u b l i c
65 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
66 ∗ @return s t r i n g o u r i
67 ∗ @throws E x c e p t i o n Caso o URI n o f o i s e t a d o
68 ∗ /
69 p u b l i c f u n c t i o n getURI ( )
70 {71 i f ( i s s e t ( $ t h i s−>u r i ) ) {72 r e t u r n $ t h i s−>u r i ;
73 } e l s e {74 th row new E x c e p t i o n ( ’ERRO: URI n o setado’ ) ;
75 }76 }77
78 } /∗ end o f c l a s s u n i f o r m R e s o u r c e I d e n t i f i e r ∗ /
79
80 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − IPAddres s . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
206
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i GeneralName
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralName.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e que r e p r e s e n t a o t i p o IPAddres s
30 ∗31 ∗ IPAddres s em f o r m a t o ASN . 1 : <br>
32 ∗ i P A d d r e s s [ 7 ] OCTET STRING , <br>
33 ∗34 ∗ @access p u b l i c
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ /
37 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s I P A d d r e s s
38 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e
39 {40
41 p r i v a t e $ i P A d d r e s s = ’’ ;
42
43 /∗ ∗44 ∗ S e t a o IPAddres s
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @param s t r i n g IPAddres s a s e t a r
49 ∗ @return v o i d
50 ∗ @except ion E x c e p t i o n Caso o t i p o n o f o r s t r i n g
51 ∗ /
52 p u b l i c f u n c t i o n s e t I P A d d r e s s ( $ i P A d d r e s s )
53 {54 $ f o r m a t o I P v 4 = ’
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(/[0-9]{1,2})
{0,1}$’ ;
55
207
56 $ f o r m a t o I P v 6 = ’^(
57 (([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|
58 (([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|
59 (([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f
]{1,4})|
60 (([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f
]{1,4})|
61 (([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f
]{1,4})|
62 (([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f
]{1,4})|
63 (([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)
|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\
d{1,2}))\b))|
64 (([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d
)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)
|(\d{1,2}))\b))|
65 (::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\
d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)
|(\d{1,2}))\b))|
66 ([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f
]{1,4})|
67 (::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|
68 (([0-9A-Fa-f]{1,4}:){1,7}:)
69 )$’ ;
70
71 i f ( e r e g i ( $ fo rmato IPv4 , $ i P A d d r e s s ) | | e r e g i ( $ fo rmato IPv6 ,
$ i P A d d r e s s ) ) {72 $ t h i s−>i P A d d r e s s = $ i P A d d r e s s ;
73 } e l s e {74 th row new E x c e p t i o n ( ’O e n d e r e o IP informado i n v l i d o .’ ) ;
75 }76
77 }78
79 /∗ ∗80 ∗ Re torna o v a l o r de i P A d d r e s s
81 ∗82 ∗ @access p u b l i c
83 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
84 ∗ @return s t r i n g v a l o r de i P A d d r e s s
85 ∗ @throws E x c e p t i o n Caso o IPAddres s n o e s t i v e r s e t a d o
86 ∗ /
208
87 p u b l i c f u n c t i o n g e t I P A d d r e s s ( )
88 {89 i f ( $ t h i s−>i P A d d r e s s != ’’ ) {90 r e t u r n $ t h i s−>i P A d d r e s s ;
91 } e l s e {92 th row new E x c e p t i o n ( ’Erro: ipAddress vazio.’ ) ;
93 }94 }95
96 } /∗ end o f c l a s s IPAddres s ∗ /
97
98 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − OtherName . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ i n c l u i GeneralName
22 ∗23 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
24 ∗ /
25 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralName.php’ ) ;
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/ObjectIdentifier.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e que r e p r e s e n t a o t i p o OtherName
30 ∗
209
31 ∗ OtherName em f o r m a t o ASN . 1 : <br>
32 ∗ otherName OtherName <br>
33 ∗34 ∗ OtherName : := SEQUENCE { <br>
35 ∗ t ype−i d OBJECT IDENTIFIER , <br>
36 ∗ v a l u e [ 0 ] EXPLICIT ANY DEFINED BY type−i d } <br>
37 ∗38 ∗ @access p u b l i c
39 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
40 ∗ /
41 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s O t h e r N a m e
42 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e
43 {44 p r i v a t e $otherNames = array ( ) ;
45
46 p r i v a t e $ c o n t a d o r = 0 ;
47
48 /∗ ∗49 ∗ A d i c i o n a um OtherName
50 ∗51 ∗ @access p u b l i c
52 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
53 ∗ @param O b j e c t I d e n t i f i e r v a l o r do campo ID do OtherName
54 ∗ @param var v a l o r do campo v a l u e do OtherName
55 ∗ @return v o i d
56 ∗ /
57 p u b l i c f u n c t i o n addOtherName (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $id , $ v a l u e )
58 {59 i f ( $ v a l u e != NULL) {60 $ t h i s−>otherNames [ $ t h i s−>c o n t a d o r ] [ ’id’ ] = $ i d ;
61 $ t h i s−>otherNames [ $ t h i s−>c o n t a d o r ] [ ’valor’ ] = $ v a l u e ;
62 $ t h i s−>c o n t a d o r ++;
63 } e l s e {64 th row new E x c e p t i o n ( ’ P a r m e t r o value do OtherName i n v l i d o ’ ) ;
65 }66 }67
68 /∗ ∗69 ∗ Re torna a s e q u ł n c i a de OtherNames
70 ∗71 ∗ @access p u b l i c
72 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
210
73 ∗ @return a r r a y Os OtherNames
74 ∗ @throws E x c e p t i o n Quando os otherNames n o e s t i v e r e m s e t a d o s .
75 ∗ /
76 p u b l i c f u n c t i o n getOtherNames ( )
77 {78 i f ( count ( $ t h i s−>otherNames ) > 0) {79 r e t u r n $ t h i s−>otherNames ;
80 } e l s e {81 th row new E x c e p t i o n ( ’ERRO: OtherName vazio.’ ) ;
82 }83 }84
85 } /∗ end o f c l a s s OtherName ∗ /
86
87 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − Direc toryName . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i GeneralName
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralName.php’ ) ;
27 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/RDNSequence.php’ ) ;
211
28
29 /∗ ∗30 ∗ C l a s s e que r e p r e s e n t a o t i p o Direc toryName
31 ∗32 ∗ Direc toryName em f o r m a t o ASN . 1 : <br>
33 ∗ d i r e c t o r y N a m e Name <br>
34 ∗35 ∗ Name ::= CHOICE { <br>
36 ∗ RDNSequence } <br>
37 ∗38 ∗ RDNSequence : := SEQUENCE OF R e l a t i v e D i s t i n g u i s h e d N a m e <br>
39 ∗40 ∗ @access p u b l i c
41 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
42 ∗ /
43 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s D i r e c t o r y N a m e
44 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e
45 {46
47 p r i v a t e $ d i r e c t o r y N a m e s = array ( ) ;
48
49 /∗ ∗50 ∗ A d i c i o n a um d i r e c t o r y N a m e
51 ∗52 ∗ @access p u b l i c
53 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
54 ∗ @param s t r i n g d i r e c t o r y N a m e
55 ∗ @return v o i d
56 ∗ /
57 p u b l i c f u n c t i o n addDirec to ryName (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e $dirName )
58 {59 $ t h i s−>d i r e c t o r y N a m e s [ ] = $dirName ;
60 }61
62 /∗ ∗63 ∗ Re torna o v a l o r de d i r e c t o r y N a m e
64 ∗65 ∗ @access p u b l i c
66 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
67 ∗ @return Uma a r r a y c o n t e n d o t o d o s os d i r e c t o r y N a m e s .
68 ∗ @throws E x c e p t i o n D e x c e o quando Direc toryName e s t i v e r v a z i o .
69 ∗ /
212
70 p u b l i c f u n c t i o n g e t D i r e c t o r y N a m e s ( )
71 {72 / / s e c o n t i v e r a lgo
73 i f ( count ( $ t h i s−>d i r e c t o r y N a m e s ) > 0) {74 r e t u r n $ t h i s−>d i r e c t o r y N a m e s ;
75 } e l s e {76 th row new E x c e p t i o n ( "DirectoryName Vazio" ) ;
77 }78 }79
80 } /∗ end o f c l a s s Direc toryName ∗ /
81
82 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − EDIPartyName . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i GeneralName
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralName.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e que r e p r e s e n t a o t i p o EdiPartyName
213
30 ∗31 ∗ EdiPartyName em f o r m a t o ASN . 1 : <br>
32 ∗ ediPar tyName EDIPartyName <br>
33 ∗34 ∗ EDIPartyName : := SEQUENCE { <br>
35 ∗ nameAss igner [ 0 ] D i r e c t o r y S t r i n g OPTIONAL , <br>
36 ∗ partyName [ 1 ] D i r e c t o r y S t r i n g } <br>
37 ∗38 ∗ D i r e c t o r y S t r i n g : := CHOICE {39 ∗ t e l e t e x S t r i n g T e l e t e x S t r i n g ( SIZE ( 1 . . MAX) ) ,
40 ∗ p r i n t a b l e S t r i n g P r i n t a b l e S t r i n g ( SIZE ( 1 . . MAX) ) ,
41 ∗ u n i v e r s a l S t r i n g U n i v e r s a l S t r i n g ( SIZE ( 1 . . MAX) ) ,
42 ∗ u t f 8 S t r i n g UTF8Str ing ( SIZE ( 1 . . MAX) ) ,
43 ∗ bmpS t r ing BMPString ( SIZE ( 1 . . MAX) ) }44 ∗45 ∗ @access p u b l i c
46 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
47 ∗ /
48 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s E d i P a r t y N a m e
49 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e
50 {51
52 p r i v a t e $ediPar tyName = array ( ) ;
53
54 / / c o n t a d o r para a s e q u e n c e EDIPartyName
55 p r i v a t e $ c o n t a d o r = 0 ;
56
57 /∗ ∗58 ∗ A d i c i o n a um ediPar tyName . Se o campo nameAss igner n o
59 ∗60 ∗ @access p u b l i c
61 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
62 ∗ @param s t r i n g EdiPartyName a a d i c i o n a r
63 ∗ @param s t r i n g NameAssigner a a d i c i o n a r . P a r m e t r o Opc iona l
64 ∗ @return v o i d
65 ∗ /
66 p u b l i c f u n c t i o n addEdiPar tyName ( $partyName , $nameAss igner =’’ )
67 {68 / / s e partyName f o r s t r i n g , add partyName
69 i f ( i s s t r i n g ( $partyName ) ) {70 $ t h i s−>ed iPar tyName [ $ t h i s−>c o n t a d o r ] [ ’partyName’ ] =
$partyName ;
71
214
72 / / s e nameAss igner e s t i v e r p r e e n c h i d o E f o r uma
s t r i n g , add nameAss igner
73 i f ( ( $nameAss igner != ’’ ) && ( i s s t r i n g (
$nameAss igner ) ) ) {74 $ t h i s−>ed iPar tyName [ $ t h i s−>c o n t a d o r ] [ ’
nameAssigner’ ] = $nameAss igner ;
75
76 } e l s e i f ( ! i s s t r i n g ( $nameAss igner ) ) {77 th row new E x c e p t i o n ( ’ P a r m e t r o
nameAssigner no tipo EdiPartyName
i n v l i d o ’ ) ;
78 }79
80 / / i n c r e m e n t a c o n t a d o r
81 $ t h i s−>c o n t a d o r ++;
82
83 } e l s e i f ( ! i s s t r i n g ( $partyName ) ) {84 th row new E x c e p t i o n ( ’ P a r m e t r o partyName no tipo
EdiPartyName i n v l i d o ’ ) ;
85 }86 }87
88 /∗ ∗89 ∗ Re torna os EdiPartyNames
90 ∗91 ∗ @access p u b l i c
92 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
93 ∗ @return Array c o n t e n d o os Ed i tPar tyNames
94 ∗ /
95 p u b l i c f u n c t i o n ge tEd iPa r tyNames ( )
96 {97 r e t u r n $ t h i s−>ed iPar tyName ;
98 }99
100 } /∗ end o f c l a s s EdiPartyName ∗ /
101
102 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − c l a s s . RDNSequence . php
215
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 1 0 : 1 8
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ C l a s s e que r e p r e s e n t a o t i p o RDNSequence . <br>
22 ∗23 ∗ RDNSequence segundo ASN . 1 : <br>
24 ∗25 ∗ RDNSequence : := SEQUENCE OF R e l a t i v e D i s t i n g u i s h e d N a m e <br>
26 ∗27 ∗ R e l a t i v e D i s t i n g u i s h e d N a m e ::= <br>
28 ∗ SET OF A t t r i b u t e T y p e A n d V a l u e <br>
29 ∗30 ∗ A t t r i b u t e T y p e A n d V a l u e : := SEQUENCE { <br>
31 ∗ t y p e A t t r i b u t e T y p e , <br>
32 ∗ v a l u e A t t r i b u t e V a l u e } <br>
33 ∗34 ∗ A t t r i b u t e T y p e : := OBJECT IDENTIFIER <br>
35 ∗36 ∗ A t t r i b u t e V a l u e : := ANY DEFINED BY A t t r i b u t e T y p e <br>
37 ∗38 ∗ @access p u b l i c
39 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
40 ∗ /
41 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e
42 {43 c o n s t COMMON NAME = ’CN’ ;
44
45 c o n s t ORGANIZATION = ’O’ ;
46
47 c o n s t ORGANIZATION UNIT = ’OU’ ;
48
216
49 c o n s t COUNTRY = ’C’ ;
50
51 c o n s t DISTINGUISHED NAME QUALIFIER = ’DNQ’ ;
52
53 c o n s t STATE = ’ST’ ;
54
55 c o n s t SERIAL NUMBER = ’S’ ;
56
57 c o n s t LOCALITY = ’L’ ;
58
59 c o n s t TITLE = ’T’ ;
60
61 c o n s t SURNAME = ’SN’ ;
62
63 c o n s t GIVEN NAME = ’GN’ ;
64
65 c o n s t INITIALS = ’I’ ;
66
67 c o n s t PSEUDONYM = ’PS’ ;
68
69 c o n s t GENERATION QUALIFIER = ’GQ’ ;
70
71 c o n s t EMAIL = ’E’ ;
72
73 p r i v a t e $ r d n s = array ( ) ;
74
75 /∗ ∗76 ∗ A d i c i o n a uma e n t r a d a no RDNSequence
77 ∗78 ∗ @access p u b l i c
79 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
80 ∗ @param i n t uma c o n s t a n t e de c l a s s e , i n d i c a n d o qua l o t i p o do
a t r i b u t o
81 ∗ @param s t r i n g O v a l o r
82 ∗ @return v o i d
83 ∗ @throws E x c e p t i o n Caso o p a r m e t r o t y p e n o s e j a n u m r i c o .
84 ∗ @throws E x c e p t i o n Caso o p a r m e t r o t y p e s e j a menor que 15 e maior
que 0 . E s t e
85 ∗ o i n t e r v a l o d e f i n i d o p e l a s c o n t a n t e s de c l a s s e
86 ∗ /
87 p u b l i c f u n c t i o n a d d E n t r y ( $ type , $ v a l u e )
88 {89 i f ( i s s t r i n g ( $ t y p e ) ) {
217
90
91 i f ( $ t h i s−>v e r i f i c a T i p o ( $ t y p e ) ) {92 $ t h i s−>r d n s [ $ t y p e ] [ ] = $ v a l u e ;
93 } e l s e {94 th row new E x c e p t i o n ( ’ P a r m e t r o type de RDNSequence
i n v l i d o .’ . " Type: $type, Value: $value" ) ;
95 }96
97 } e l s e {98 th row new E x c e p t i o n ( ’ P a r m e t r o type de RDNSequence deve ser
string.’ ) ;
99 }100 }101
102 p r i v a t e f u n c t i o n v e r i f i c a T i p o ( $ t y p e ) {103 i f ( $ t y p e != ’CN’ && $ t y p e != ’O’ && $ t y p e != ’OU’ && $ t y p e != ’C’
&& $ t y p e != ’DNQ’ &&
104 $ t y p e != ’ST’ && $ t y p e != ’S’ && $ t y p e != ’L’ && $ t y p e != ’T’ &&
$ t y p e != ’SN’ &&
105 $ t y p e != ’GN’ && $ t y p e != ’I’ && $ t y p e != ’PS’ && $ t y p e != ’GQ’ &&
$ t y p e != ’E’ ) {106 r e t u r n f a l s e ;
107 } e l s e {108 r e t u r n t rue ;
109 }110
111 }112
113 /∗ ∗114 ∗ Re torna as e n t r a d a de RDNSequence
115 ∗116 ∗ @access p u b l i c
117 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
118 ∗ @return a r r a y uma a r r a y b i d i m e n s i o n a l , com o p r i m e i r o n v e l
n u m r i c o
119 ∗ e o segundo n v e l sendo os campos t y p e e v a l u e da RDNSequence .
120 ∗ I s t o f o i f e i t o p o i s uma RDNSequence pode s e r formada por 2
CommonNames
121 ∗ por exemplo ! E n t o t y p e n o pode s e r u t i l i z a d o como n d i c e do
a r r a y .
122 ∗ @throws E x c e p t i o n Caso o RDNSequence n o c o n t e n h a nenhuma en t rada ,
l a n a e x c e o
123 ∗ /
218
124 p u b l i c f u n c t i o n g e t E n t r i e s ( )
125 {126 i f ( count ( $ t h i s−>r d n s ) > 0) {127 r e t u r n $ t h i s−>r d n s ;
128 } e l s e {129 th row new E x c e p t i o n ( ’RDNSequece sem nenhuma entrada. Deve haver
pelo menos uma entrada.’ ) ;
130 }131 }132
133 } /∗ end o f c l a s s RDNSequence ∗ /
134
135 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − R e g i s t e r e d I D . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i GeneralName
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/GeneralName.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e que r e p r e s e n t a o t i p o R e g i s t e r e d I D
219
30 ∗31 ∗ R e g i s t e r e d I D em f o r m a t o ASN . 1 : <br>
32 ∗ r e g i s t e r e d I D OBJECT IDENTIFIER <br>
33 ∗34 ∗ @access p u b l i c
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ /
37 c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R e g i s t e r e d I D
38 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e
39 {40
41 p r i v a t e $ r e g i s t e r e d I D ;
42
43 /∗ ∗44 ∗ S e t a o r e g i s t e r e d I D
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @param O b j e c t I d e n t i f i e r r e g i s t e r e d I D
49 ∗ @return v o i d
50 ∗ @except ion E x c e p t i o n Caso o t i p o n o f o r v l i d o
51 ∗ /
52 p u b l i c f u n c t i o n s e t R e g i s t e r e d I D (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $ r e g i s t e r e d I D )
53 {54 $ t h i s−>r e g i s t e r e d I D = $ r e g i s t e r e d I D ;
55 }56
57 /∗ ∗58 ∗ Re torna o v a l o r de r e g i s t e r e d I D
59 ∗60 ∗ @access p u b l i c
61 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
62 ∗ @return O b j e c t I d e n t i f i e r R e g i s t e r e d I D
63 ∗ @throws E x c e p t i o n Quando o r e g i s t e r e d I D n o e s t i v e r s e t a d o
64 ∗ /
65 p u b l i c f u n c t i o n g e t R e g i s t e r e d I D ( )
66 {67 i f ( i s s e t ( $ t h i s−>r e g i s t e r e d I D ) ) {68 r e t u r n $ t h i s−>r e g i s t e r e d I D ;
69 } e l s e {70 th row new E x c e p t i o n ( ’ERRO: registeredID n o setado.’ ) ;
71 }
220
72 }73
74 } /∗ end o f c l a s s R e g i s t e r e d I D ∗ /
75
76 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − GeneralName . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ C l a s s e a b s t r a t a que imp lemen ta o t i p o GeneralName da RFC 3280 . <br>
23 ∗24 ∗ GeneralName em f o r m a t o ASN . 1 : <br>
25 ∗ GeneralName : := CHOICE { <br>
26 ∗ otherName [ 0 ] OtherName , <br>
27 ∗ rfc822Name [ 1 ] I A 5 S t r i n g , <br>
28 ∗ dNSName [ 2 ] I A 5 S t r i n g , <br>
29 ∗ x400Address [ 3 ] ORAddress , <br>
30 ∗ d i r e c t o r y N a m e [ 4 ] Name , <br>
31 ∗ ediPar tyName [ 5 ] EDIPartyName , <br>
32 ∗ u n i f o r m R e s o u r c e I d e n t i f i e r [ 6 ] I A 5 S t r i n g , <br>
33 ∗ i P A d d r e s s [ 7 ] OCTET STRING , <br>
34 ∗ r e g i s t e r e d I D [ 8 ] OBJECT IDENTIFIER <br>
35 ∗ } <br>
36 ∗37 ∗ @abs t rac t
221
38 ∗ @access p u b l i c
39 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
40 ∗ /
41 a b s t r a c t c l a s s L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e
42 {43 } /∗ end o f a b s t r a c t c l a s s GeneralName ∗ /
44
45 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . C e r t i f i c a t e B u i l d e r . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 9 : 4 5
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ I n t e r f a c e do B u i l d e r da c l a s s e C e r t i f i c a t e
22 ∗23 ∗ @access p u b l i c
24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 i n t e r f a c e L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e B u i l d e r
27 {28 /∗ ∗29 ∗ C o n s t r u t o r . Se uma r e q u i s i o f o r passada como p a r m e t r o , os
dados s o
30 ∗ e x t r a d o s da r e q u i s i o a u t o m a t i c a m e n t e .
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
222
34 ∗ @param L a b s e c S e c u r i t y C e r t i f i c a t i o n R e q u e s t C e r t i f i c a t e R e q u e s t Uma
r e q u i s i o de c e r t i f i c a d o . P a r m e t r o Opc iona l
35 ∗ @return v o i d
36 ∗ /
37 p u b l i c f u n c t i o n c o n s t r u c t (
L a b s e c S e c u r i t y C e r t i f i c a t i o n R e q u e s t C e r t i f i c a t e R e q u e s t $ r e q u e s t =
n u l l ) ;
38
39 /∗ ∗40 ∗ S e t a o S u b j e c t do C e r t i f i c a d o
41 ∗42 ∗ @access p u b l i c
43 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
44 ∗ @param L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e o s u j e i t o
45 ∗ @return v o i d
46 ∗ /
47 p u b l i c f u n c t i o n s e t S u b j e c t (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e $ s u b j e c t ) ;
48
49 /∗ ∗50 ∗ S e t a o I s s u e r do c e r t i f i c a d o
51 ∗52 ∗ @access p u b l i c
53 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
54 ∗ @param L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e o e m i s s o r
55 ∗ @return v o i d
56 ∗ /
57 p u b l i c f u n c t i o n s e t I s s u e r (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e $ i s s u e r ) ;
58
59 /∗ ∗60 ∗ S e t a o n m e r o s e r i a l do c e r t i f i c a d o .
61 ∗62 ∗ @access p u b l i c
63 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
64 ∗ @param mixed o n m e r o s e r i a l
65 ∗ @return v o i d
66 ∗ /
67 p u b l i c f u n c t i o n s e t S e r i a l N u m b e r ( $ s e r i a l ) ;
68
69 /∗ ∗70 ∗ S e t a a Pub l i cKey do c e r t i f i c a d o
71 ∗
223
72 ∗ @access p u b l i c
73 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
74 ∗ @param var a chave p b l i c a
75 ∗ @return v o i d
76 ∗ /
77 p u b l i c f u n c t i o n s e t P u b l i c K e y ( L a b s e c S e c u r i t y C r y p t o P u b l i c K e y $pubKey ) ;
78
79 /∗ ∗80 ∗ S e t a o N o t B e f o r e do c e r t i f i c a d o
81 ∗82 ∗ @access p u b l i c
83 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
84 ∗ @param Zend Date A da ta de e x p i r a o do c e r t i f i c a d o
85 ∗ @return v o i d
86 ∗ /
87 p u b l i c f u n c t i o n s e t N o t B e f o r e ( Zend Date $ n o t B e f o r e ) ;
88
89 /∗ ∗90 ∗ S e t a o N o t A f t e r do c e r t i f i c a d o
91 ∗92 ∗ @access p u b l i c
93 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
94 ∗ @param Zend Date A da ta de i n i c i a l de v a l i d a d e do c e r t i f i c a d o
95 ∗ @return v o i d
96 ∗ /
97 p u b l i c f u n c t i o n s e t N o t A f t e r ( Zend Date $ n o t A f t e r ) ;
98
99 /∗ ∗100 ∗ A d i c i o n a uma e x t e n s o ao c e r t i f i c a d o
101 ∗102 ∗ @access p u b l i c
103 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
104 ∗ @param L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n a e x t e n s o
105 ∗ @return v o i d
106 ∗ /
107 p u b l i c f u n c t i o n a d d E x t e n s i o n ( L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
$ e x t e n s i o n ) ;
108
109 /∗ ∗110 ∗ A d i c i o n a uma l i s t a e x t e n s e s ao c e r t i f i c a d o .
111 ∗112 ∗ @access p u b l i c
113 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
224
114 ∗ @param a r r a y uma a r r a y c o n t e n d o em cada l i n h a uma e x t e n s o a s e r
a d i c i o n a d a
115 ∗ no c e r t i f i c a d o
116 ∗ @return v o i d
117 ∗ /
118 p u b l i c f u n c t i o n a d d E x t e n s i o n s ( $ e x t e n s i o n s ) ;
119
120 /∗ ∗121 ∗ A s s i n a os dados , e c r i a um o b j e t o C e r t i f i c a t e
122 ∗123 ∗ @access p u b l i c
124 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
125 ∗ @param P r i v a t e K e y a chave p r i v a d a do e m i s s o r
126 ∗ @param s t r i n g o a l g o r i t m o de hash
127 ∗ @param C e r t i f i c a t e T e m p l a t e o t e m p l a t e . P a r m e t r o Opc iona l
128 ∗ @param s t r i n g argumentos e x t r a s . P a r m e t r o Opc iona l
129 ∗ @return C e r t i f i c a t e Um c e r t i f i c a d o a s s i n a d o
130 ∗ /
131 p u b l i c f u n c t i o n s i g n ( L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y $ p r i v a t e K e y ,
$hashAlgor i thm ,
132 L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e T e m p l a t e $ t e m p a t e = n u l l ,
$ e x t r a A r g s = n u l l ) ;
133
134 } /∗ end o f i n t e r f a c e C e r t i f i c a t e B u i l d e r ∗ /
135
136 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . C e r t i f i c a t e R e v o c a t i o n L i s t . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 6 : 5 8 : 3 6
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {
225
17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ C l a s s e que r e p r e s e n t a uma LCR( L i s t a de C e r t i f i c a d o s Revogados )
22 ∗23 ∗ @access p u b l i c
24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 i n t e r f a c e L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e R e v o c a t i o n L i s t
27 {28 /∗ ∗29 ∗ Re torna a LCR em f o r m a t o PEM
30 ∗31 ∗ @access p u b l i c
32 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
33 ∗ @return s t r i n g a LCR em f o r m a t o PEM
34 ∗ /
35 p u b l i c f u n c t i o n getPem ( ) ;
36
37 /∗ ∗38 ∗ Re torna a LCR em f o r m a t o DER
39 ∗40 ∗ @access p u b l i c
41 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
42 ∗ @return var a LCR em f o r m a t o DER
43 ∗ /
44 p u b l i c f u n c t i o n ge tD e r ( ) ;
45
46 /∗ ∗47 ∗ Re torna a v e r s o da LCR
48 ∗49 ∗ @access p u b l i c
50 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
51 ∗ @return i n t a v e r s o da LCR
52 ∗ /
53 p u b l i c f u n c t i o n g e t V e r s i o n ( ) ;
54
55 /∗ ∗56 ∗ Re torna o e m i s s o r da LCR
57 ∗58 ∗ @access p u b l i c
59 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
226
60 ∗ @return RDNSequence o e m i s s o r
61 ∗ /
62 p u b l i c f u n c t i o n g e t I s s u e r ( ) ;
63
64 /∗ ∗65 ∗ Re torna a da ta de e m i s s o da LCR
66 ∗67 ∗ @access p u b l i c
68 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
69 ∗ @return Zend Date a da ta de e m i s s o
70 ∗ /
71 p u b l i c f u n c t i o n g e t T h i s U p d a t e ( ) ;
72
73 /∗ ∗74 ∗ Re torna a d a ta de e m i s s o da p r x i m a LCR
75 ∗76 ∗ @access p u b l i c
77 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
78 ∗ @return Zend Date a da ta de e m i s s o da p r x i m a LCR
79 ∗ /
80 p u b l i c f u n c t i o n ge tNex tUpda t e ( ) ;
81
82 /∗ ∗83 ∗ Re torna as e x t e n s e s da LCR
84 ∗85 ∗ @access p u b l i c
86 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
87 ∗ @return a r r a y uma a r r a y c o n t e n d o em cada l i n h a uma e x t e n s o da LCR
88 ∗ /
89 p u b l i c f u n c t i o n g e t E x t e n s i o n s ( ) ;
90
91 /∗ ∗92 ∗ Re torna uma e x t e n s o e s p e c f i c a
93 ∗94 ∗ @access p u b l i c
95 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
96 ∗ @param O b j e c t I d e n t i f i e r o OID da e x t e n s o a s e r r e t o r n a d a
97 ∗ @return E x t e n s i o n a e x t e n s o s o l i c i t a d a
98 ∗ /
99 p u b l i c f u n c t i o n g e t E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id ) ;
100
101 /∗ ∗
227
102 ∗ Re torna as E x t e n s e s d e s c o n h e c i d a s
103 ∗104 ∗ @access p u b l i c
105 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
106 ∗ @return a r r a y uma a r r a y c o n t e n d o as e x t e n s e s d e s c o n h e c i d a s
107 ∗ /
108 p u b l i c f u n c t i o n ge tUnknownExtens ions ( ) ;
109
110 /∗ ∗111 ∗ V e r i f i c a a a s s i n a t u r a
112 ∗113 ∗ @access p u b l i c
114 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
115 ∗ @return boo lean TRUE caso a a s s i n a t u r a f o r v l i d a , FALSE caso
c o n t r r i o
116 ∗ /
117 p u b l i c f u n c t i o n v e r i f y S i g n a t u r e ( ) ;
118
119 /∗ ∗120 ∗ Re torna as e n t r a d a s da CRL
121 ∗122 ∗ @access p u b l i c
123 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
124 ∗ @return CRLEntry as e n t r a d a s da CRL
125 ∗ /
126 p u b l i c f u n c t i o n g e t C R L E n t r i e s ( ) ;
127
128 /∗ ∗129 ∗ V e r i f i c a se um c e r t i f i c a d o c o n s t a na LCR
130 ∗131 ∗ @access p u b l i c
132 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
133 ∗ @param C e r t i f i c a t e o c e r t i f i c a d o a s e r v e r i f i c a d o
134 ∗ @return boo lean TRUE se o c e r t i f i c a d o e s t i v e r revogado , FALSE caso
n o e s t i v e r .
135 ∗ /
136 p u b l i c f u n c t i o n i sRevoked ( L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e
$ c e r t i f i c a t e ) ;
137
138 } /∗ end o f i n t e r f a c e C e r t i f i c a t e R e v o c a t i o n L i s t ∗ /
139
140 ?>
228
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . C e r t i f i c a t e T e m p l a t e . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 9 : 5 9
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ C l a s s e que r e p r e s e n t a os T e m p l a t e s de C e r t i f i c a d o s
22 ∗23 ∗ @access p u b l i c
24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 i n t e r f a c e L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e T e m p l a t e
27 {28
29 /∗ ∗30 ∗ S e t a V a l i d i t y D a y s
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ @param i n t q u a n t i d a d e de d i a s
35 ∗ @return v o i d
36 ∗ /
37 p u b l i c f u n c t i o n s e t V a l i d i t y D a y s ( $days ) ;
38
39 /∗ ∗40 ∗ A d i c i o n a uma e x t e n s o
41 ∗42 ∗ @access p u b l i c
43 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
229
44 ∗ @param E x t e n s i o n a e x t e n s o a a d i c i o n a r
45 ∗ @return v o i d
46 ∗ /
47 p u b l i c f u n c t i o n a d d E x t e n s i o n ( L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
$ e x t e n s i o n ) ;
48
49 /∗ ∗50 ∗ A d i c i o n a v r i a s e x t e n s e s
51 ∗52 ∗ @access p u b l i c
53 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
54 ∗ @param a r r a y uma a r r a y c o n t e n d o em cada l i n h a uma e x t e n s o
55 ∗ @return v o i d
56 ∗ /
57 p u b l i c f u n c t i o n a d d E x t e n s i o n s ( $ e x t e n s i o n s ) ;
58
59 /∗ ∗60 ∗ Re torna os d i a s de v a l i d a d e
61 ∗62 ∗ @access p u b l i c
63 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
64 ∗ @return i n t a q u a n t i d a d e de d i a s de v a l i d a d e
65 ∗ /
66 p u b l i c f u n c t i o n g e t V a l i d i t y D a y s ( ) ;
67
68 /∗ ∗69 ∗ Re torna uma e x t e n s o e s p e c f i c a
70 ∗71 ∗ @access p u b l i c
72 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
73 ∗ @param O b j e c t I d e n t i f i e r o OID da e x t e n s o
74 ∗ @return E x t e n s i o n a e x t e n s o s o l i c i t a d a
75 ∗ /
76 p u b l i c f u n c t i o n g e t E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id ) ;
77
78 /∗ ∗79 ∗ Re torna as e x t e n s e s
80 ∗81 ∗ @access p u b l i c
82 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
83 ∗ @return a r r a y uma a r r a y c o n t e n d o em cada l i n h a uma e x t e n s o
84 ∗ /
230
85 p u b l i c f u n c t i o n g e t E x t e n s i o n s ( ) ;
86
87 } /∗ end o f i n t e r f a c e C e r t i f i c a t e T e m p l a t e ∗ /
88
89 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − i n t e r f a c e . C e r t i f i c a t e R e q u e s t . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 8 : 4 5
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
20 /∗ ∗21 ∗ I n t e r f a c e r e s p o n s v e l p e l a r e q u i s i o de c e r t i f i c a d o
22 ∗23 ∗ @access p u b l i c
24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 i n t e r f a c e L a b s e c S e c u r i t y C e r t i f i c a t i o n R e q u e s t C e r t i f i c a t e R e q u e s t
27 {28
29 /∗ ∗30 ∗ C o n s t r u t o r . Se f o r passado como p a r m e t r o , l ł a r e q u i s i o .
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ @return v o i d
35 ∗ /
36 p u b l i c f u n c t i o n c o n s t r u c t ( $da ta , $ t y p e ) ;
37
231
38 /∗ ∗39 ∗ Re torna a r e q u i s i o em f o r m a t o PEM
40 ∗41 ∗ @access p u b l i c
42 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
43 ∗ @return s t r i n g a r e q u i s i a o em f o r m a t o PEM
44 ∗ /
45 p u b l i c f u n c t i o n getPem ( ) ;
46
47 /∗ ∗48 ∗ Re torna a r e q u i s i o em f o r m a t o DER
49 ∗50 ∗ @access p u b l i c
51 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
52 ∗ @return s t r i n g a r e q u i s i a o em f o r m a t o DER
53 ∗ /
54 p u b l i c f u n c t i o n g e t De r ( ) ;
55
56 /∗ ∗57 ∗ Re torna achave p b l i c a da r e q u i s i o
58 ∗59 ∗ @access p u b l i c
60 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
61 ∗ @return Pub l i cKey a chave p b l i c a
62 ∗ /
63 p u b l i c f u n c t i o n g e t P u b l i c K e y ( ) ;
64
65 /∗ ∗66 ∗ Re torna o S u b j e c t
67 ∗68 ∗ @access p u b l i c
69 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
70 ∗ @return RDNSequence o s u b j e c t
71 ∗ /
72 p u b l i c f u n c t i o n g e t S u b j e c t ( ) ;
73
74 /∗ ∗75 ∗ Re torna as e x t e n s e s
76 ∗77 ∗ @access p u b l i c
78 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
79 ∗ @return a r r a y Array com as e x t e n s e s
80 ∗ /
232
81 p u b l i c f u n c t i o n g e t E x t e n s i o n s ( ) ;
82
83 /∗ ∗84 ∗ Re torna uma e x t e n s o e s p e c i f i c a . Se a e x t e n s o n o e x i s t i r ,
r e t o r n a NULL
85 ∗86 ∗ @access p u b l i c
87 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
88 ∗ @param O b j e c t I d e n t i f i e r O OID da e x t e n s o a s e r r e t o r n a d a
89 ∗ @return E x t e n s i o n a e x t e n s o
90 ∗ /
91 p u b l i c f u n c t i o n g e t E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id ) ;
92
93 /∗ ∗94 ∗ Re torna as e x t e n s e s d e s c o n h e c i d a s
95 ∗96 ∗ @access p u b l i c
97 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
98 ∗ @return a r r a y Array com as UnknownExtens ions
99 ∗ /
100 p u b l i c f u n c t i o n ge tUnknownExtens ions ( ) ;
101
102 /∗ ∗103 ∗ V e r i f i c a se a a s s i n a t u r a v l i d a
104 ∗105 ∗ @access p u b l i c
106 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
107 ∗ @return boo lean TRUE caso a a s s i n a t u r a s e j a v l i d a , FALSE caso
c o n t r r i o .
108 ∗ /
109 p u b l i c f u n c t i o n v e r i f y S i g n a t u r e ( ) ;
110
111 } /∗ end o f i n t e r f a c e C e r t i f i c a t e R e q u e s t ∗ /
112
113 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3 / / TODO DOCUMENTACAO
4
5 /∗ ∗6 ∗ s g c i − c l a s s . C e r t i f i c a t e R e q u e s t B u i l d e r . php
233
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 8 : 5 9
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ I n t e r f a c e que imp lemen ta o p a d r o de p r o j e t o B u i l d e r das r e q u i s i e s
23 ∗ de c e r t i f i c a d o .
24 ∗ @access p u b l i c
25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 i n t e r f a c e L a b s e c S e c u r i t y C e r t i f i c a t i o n R e q u e s t C e r t i f i c a t e R e q u e s t B u i l d e r
28 {29
30 /∗ ∗31 ∗ S h o r t d e s c r i p t i o n o f method c o n s t r u c t
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ @return v o i d
36 ∗ /
37 p u b l i c f u n c t i o n c o n s t r u c t ( ) ;
38
39 /∗ ∗40 ∗ S h o r t d e s c r i p t i o n o f method s e t P u b l i c K e y
41 ∗42 ∗ @access p u b l i c
43 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
44 ∗ @return v o i d
45 ∗ /
46 p u b l i c f u n c t i o n s e t P u b l i c K e y ( L a b s e c S e c u r i t y C r y p t o P u b l i c K e y
$pubKey ) ;
47
48 /∗ ∗
234
49 ∗ S h o r t d e s c r i p t i o n o f method s e t S u b j e c t
50 ∗51 ∗ @access p u b l i c
52 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
53 ∗ @param RDNSequence
54 ∗ @return v o i d
55 ∗ /
56 p u b l i c f u n c t i o n s e t S u b j e c t (
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n D a t a T y p e s R D N S e q u e n c e
$rdnSequence ) ;
57
58 /∗ ∗59 ∗ S h o r t d e s c r i p t i o n o f method a d d E x t e n s i o n
60 ∗61 ∗ @access p u b l i c
62 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
63 ∗ @param E x t e n s i o n
64 ∗ @return v o i d
65 ∗ /
66 p u b l i c f u n c t i o n a d d E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n $ e x t e n s i o n ) ;
67
68 /∗ ∗69 ∗ S h o r t d e s c r i p t i o n o f method a d d E x t e n s i o n s
70 ∗71 ∗ @access p u b l i c
72 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
73 ∗ @param a r r a y
74 ∗ @return v o i d
75 ∗ /
76 p u b l i c f u n c t i o n a d d E x t e n s i o n s ( $ e x t e n s i o n s ) ;
77
78 /∗ ∗79 ∗ S h o r t d e s c r i p t i o n o f method s i g n
80 ∗81 ∗ @access p u b l i c
82 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
83 ∗ @param s t r i n g
84 ∗ @param s t r i n g
85 ∗ @return C e r t i f i c a t e R e q u e s t
86 ∗ /
87 p u b l i c f u n c t i o n s i g n ( L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y $ p r i v a t e K e y ,
$hashAlgor i thm , $ e x t r a A r g s = n u l l ) ;
235
88
89 } /∗ end o f i n t e r f a c e C e r t i f i c a t e R e q u e s t B u i l d e r ∗ /
90
91 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − KeyPair . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ C l a s s e r e s p o n s v e l p e l o g e r e n c i a m e n t o de um par de c h av es
23 ∗24 ∗ @access p u b l i c
25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 i n t e r f a c e L a b s e c S e c u r i t y C r y p t o K e y P a i r
28 {29
30 p u b l i c s t a t i c f u n c t i o n l o a d K e y P a i r ( $key , $passwd = n u l l ) ;
31
32 /∗ ∗33 ∗ S e t a a chave como sendo da e n g i n e .
34 ∗35 ∗ @access p u b l i c
36 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
37 ∗ @param L a b s e c S e c u r i t y E n g i n e H s m A e n g i n e
38 ∗ @param s t r i n g O I d e n t i f i c a d o r da chave .
236
39 ∗ @return L a b s e c C L S e c u r i t y C r y p t o K e y P a i r C L O par de c ha v es
40 ∗ @throws E x c e p t i o n Quando o v a l o r de $keyName f o r nu lo
41 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o da chave da e n g i n e n o f o r
s u p o r t a d a p e l a b i b l i o t e c a
42 ∗ /
43 p u b l i c s t a t i c f u n c t i o n loadKeyPa i rF romEngine (
L a b s e c S e c u r i t y E n g i n e H s m $hsm , $keyName ) ;
44
45 /∗ ∗46 ∗ Re torna a chave p b l i c a
47 ∗48 ∗ @access p u b l i c
49 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
50 ∗ @return L a b s e c S e c u r i t y C r y p t o P u b l i c K e y A chave p b l i c a
51 ∗ /
52 p u b l i c f u n c t i o n g e t P u b l i c K e y ( ) ;
53
54 /∗ ∗55 ∗ Re torna a chave p r i v a d a
56 ∗57 ∗ @access p u b l i c
58 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
59 ∗ @return L a b s e c S e c u r i t y C r y p t o P r i v a t e c K e y A chave p r i v a d a
60 ∗ /
61 p u b l i c f u n c t i o n g e t P r i v a t e K e y ( ) ;
62
63
64 } /∗ end o f KeyPair ∗ /
65
66 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − S y m m e t r i c C i p h e r I n t e r f a c e . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
237
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ I n t e r f a c e da c l a s s e S ymme t r i cC ipher
23 ∗24 ∗ @access p u b l i c
25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 i n t e r f a c e L a b s e c S e c u r i t y C r y p t o S y m m e t r i c C i p h e r
28 {29 c o n s t ALGORITHM AES 128 = "AES_128" ;
30
31 c o n s t ALGORITHM AES 192 = "AES_192" ;
32
33 c o n s t ALGORITHM AES 256 = "AES_256" ;
34
35 c o n s t ALGORITHM DES = "DES" ;
36
37 c o n s t ALGORITHM DES EDE = "DES_EDE" ;
38
39 c o n s t ALGORITHM DES EDE3 = "DES_EDE3" ;
40
41 c o n s t ALGORITHM RC2 = "RC2" ;
42
43 c o n s t ALGORITHM RC4 = "RC4" ;
44
45
46 c o n s t MODE CBC = "CBC" ;
47
48 c o n s t MODE ECB = "ECB" ;
49
50 c o n s t MODE CFB = "CFB" ;
51
52 c o n s t MODE OFB = "OFB" ;
53
54
55 /∗ ∗
238
56 ∗ C i f r a um dado com a chave s i m t r i c a in formada ,
57 ∗ u t i l i z a n d o o a l g o r i t m o no modo d e f i n i d o .
58 ∗59 ∗ @access p u b l i c
60 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
61 ∗ @param L a b s e c S e c u r i t y C r y p t o S y m m e t r i c K e y A chave que s e r
u t i l i z a d a
62 ∗ @param s t r i n g O a l g o r i t m o u t i l i z a d o
63 ∗ @param s t r e a m O dado a s e r c i f r a d o
64 ∗ @param s t r i n g O modo de o p e r a o que s e r u t i l i z a d o
65 ∗ @return s t r ea m O dado c i f r a d o
66 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o ou o modo de o p e r a o f o r
i n v l i d o
67 ∗ /
68 p u b l i c f u n c t i o n e n c r y p t ( L a b s e c S e c u r i t y C r y p t o S y m m e t r i c K e y $key , $da ta
,
69 $ a l g o r i t h m = s e l f : :
ALGORITHM DES EDE3 ,
70 $opera t ionMode = s e l f : :
MODE CBC) ;
71
72 /∗ ∗73 ∗ D e c i f r a d o um dado com a chave in formada ,
74 ∗ u t i l i z a n d o o a l g o r i t m o no modo d e f i n i d o .
75 ∗76 ∗ @access p u b l i c
77 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
78 ∗ @param L a b s e c S e c u r i t y C r y p t o S y m m e t r i c K e y A chave que s e r
u t i l i z a d a
79 ∗ @param s t r i n g O a l g o r i t m o u t i l i z a d o
80 ∗ @param s t r e a m O dado a s e r d e c i f r a d o
81 ∗ @param s t r i n g O modo de o p e r a o que s e r u t i l i z a d o
82 ∗ @return s t r ea m O dado d e c i f r a d o
83 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o ou o modo de o p e r a o f o r
i n v l i d o
84 ∗ /
85 p u b l i c f u n c t i o n d e c r y p t ( L a b s e c S e c u r i t y C r y p t o S y m m e t r i c K e y $key , $da ta
,
86 $ a l g o r i t h m = s e l f : :
ALGORITHM DES EDE3 ,
87 $opera t ionMode = s e l f : :
MODE CBC) ;
88
239
89 } /∗ end o f i n t e r f a c e Symme t r i cC ipher ∗ /
90
91 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − Pub l i cKey . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 r e q u i r e o n c e ( ’AssymmetricKey.php’ ) ;
22
23 /∗ ∗24 ∗ C l a s s e a b s t r a t a Pub l i cKey
25 ∗26 ∗ @access p u b l i c
27 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
28 ∗ /
29 a b s t r a c t c l a s s L a b s e c S e c u r i t y C r y p t o P u b l i c K e y
30 e x t e n d s L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y
31 {32 /∗ ∗33 ∗ C o n s t r u t o r .
34 ∗35 ∗ @access p u b l i c
36 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
37 ∗ @param mixed A chave p r o p r i a m e n t e d i t a
38 ∗ @param s t r i n g O f o r m a t o da chave
39 ∗ @return v o i d
240
40 ∗ @throws E x c e p t i o n Quando o f o r m a t o in fo rmado f o r i n v l i d o
41 ∗ @throws E x c e p t i o n Quando a chave n o f o r do t i p o v l i d o
42 ∗ /
43 p u b l i c a b s t r a c t f u n c t i o n c o n s t r u c t ( $key , $ f o r m a t = s e l f : : FORMAT PEM) ;
44
45 } /∗ end o f i n t e r f a c e Pub l i cKey ∗ /
46
47 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − P r i v a t e K e y . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 r e q u i r e o n c e ( ’AssymmetricKey.php’ ) ;
22
23 /∗ ∗24 ∗ C l a s s e a b s t r a t a P r i v a t e K e y
25 ∗26 ∗ @access p u b l i c
27 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
28 ∗ /
29 a b s t r a c t c l a s s L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y
30 e x t e n d s L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y
31 {32 p r o t e c t e d $ e n g i n e = n u l l ;
33
34 p r o t e c t e d $keyName = n u l l ;
241
35
36 /∗ ∗37 ∗ C o n s t r u t o r .
38 ∗39 ∗ @access p u b l i c
40 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
41 ∗ @param mixed A chave p r o p r i a m e n t e d i t a
42 ∗ @param s t r i n g A senha u t i l i z a d a na c i f r a g e m
43 ∗ @param s t r i n g O f o r m a t o da chave
44 ∗ @param L a b s e c S e c u r i t y E n g i n e H s m A Engine que pode s e r u t i l i z a d a
45 ∗ @param s t r i n g O i d e n t i f i c a d o r da chave da Engine
46 ∗ @return v o i d
47 ∗ @throws E x c e p t i o n Quando o f o r m a t o in fo rmado f o r i n v l i d o
48 ∗ @throws E x c e p t i o n Quando a chave f o r i n v l i d a
49 ∗ /
50 p u b l i c a b s t r a c t f u n c t i o n c o n s t r u c t ( $key , $passwd = n u l l , $ f o r m a t =
s e l f : : FORMAT PEM,
51 L a b s e c S e c u r i t y E n g i n e H s m
$hsm = n u l l ,
$keyName = n u l l )
;
52
53 /∗ ∗54 ∗ Re torna a chave c i f r a d a no f o r m a t o PEM
55 ∗56 ∗ @access p u b l i c
57 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
58 ∗ @param s t r i n g A senha u t i l i z a d a na c i f r a g e m
59 ∗ @param s t r i n g O nome do c i f r a d o r u t i l i z a d o
60 ∗ @throws E x c e p t i o n Quando o v a l o r de $passwd f o r nu lo
61 ∗ @throws E x c e p t i o n Quando a chave a inda n o f o i s e t a d a ou e s t i v e r em
Engine
62 ∗ /
63 p u b l i c a b s t r a c t f u n c t i o n ge tEncryp tedPemEncoded ( $passwd ,
64 $ c i p h e r =
L a b s e c S e c u r i t y C r y p t o S y m m e t r i c C i p h e r : :
ALGORITHM DES EDE3) ;
65
66 /∗ ∗67 ∗ V e r i f i c a se a chave e s t armazenada em d i s c o ou em alguma e n g i n e
68 ∗69 ∗ @access p u b l i c
70 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
242
71 ∗ @return boo l TRUE caso e s t i v e r armazenada em e n g i n e e FALSE em casa
c o n t r r i o
72 ∗ /
73 p u b l i c f u n c t i o n useEng ine ( ) {74 $ r e s u l t = f a l s e ;
75 i f ( $ t h i s−>e n g i n e != n u l l ) {76 $ r e s u l t = t rue ;
77 }78 r e t u r n $ r e s u l t ;
79 }80
81 /∗ ∗82 ∗ Re torna a e n g i n e u t i l i z a d a na chave
83 ∗84 ∗ @access p u b l i c
85 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
86 ∗ @return L a b s e c S e c u r i t y E n g i n e H s m A e n g i n e u t i l i z a d o
87 ∗ @throws E x c e p t i o n Quando a chave a inda n o f o i s e t a d a
88 ∗ @throws E x c e p t i o n Quando a chave n o e s t i v e r armazenada em e n g i n e
89 ∗ /
90 p u b l i c f u n c t i o n g e t E n g i n e ( ) {91 i f ( $ t h i s−>useEng ine ( ) ) {92 r e t u r n $ t h i s−>e n g i n e ;
93 } e l s e {94 th row new E x c e p t i o n ( ’A chave ainda n o e s t armazenada
em uma Engine’ ) ;
95 }96 }97
98 /∗ ∗99 ∗ Re torna o i d e n t i f i c a d o r da chave armazenada em e n g i n e
100 ∗101 ∗ @access p u b l i c
102 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
103 ∗ @return s t r i n g O i d e n t i f i c a d o r da chave
104 ∗ @throws E x c e p t i o n Quando a chave a inda n o f o i s e t a d a
105 ∗ @throws E x c e p t i o n Quando a chave n o e s t i v e r armazenada em e n g i n e
106 ∗ /
107 p u b l i c f u n c t i o n getKeyName ( ) {108 i f ( $ t h i s−>useEng ine ( ) ) {109 r e t u r n ( s t r i n g ) $ t h i s−>keyName ;
110 } e l s e {
243
111 th row new E x c e p t i o n ( ’A chave ainda n o e s t armazenada
em uma Engine’ ) ;
112 }113 }114
115 } /∗ end o f i n t e r f a c e P r i v a t e K e y ∗ /
116
117 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − Assymmetr icKey . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 r e q u i r e o n c e ( ’Labsec/Security/Util/Converters.php’ ) ;
22
23 /∗ ∗24 ∗ C l a s s e a b s t r a t a Assymmetr icKey
25 ∗26 ∗ @access p u b l i c
27 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
28 ∗ /
29 a b s t r a c t c l a s s L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y
30 {31 c o n s t ALGORITHM RSA = "RSA" ;
32
33 c o n s t ALGORITHM DSA = "DSA" ;
34
244
35 c o n s t FORMAT PEM = "PEM" ;
36
37 c o n s t FORMAT DER = "DER" ;
38
39 c o n s t SIZE DEFAULT = 1024 ;
40
41 p r o t e c t e d $ a l g o r i t h m ;
42
43 p r o t e c t e d $ f o r m a t = s e l f : : FORMAT PEM;
44
45 p r o t e c t e d $key = n u l l ;
46
47 p r o t e c t e d $ s i z e = s e l f : : SIZE DEFAULT ;
48
49 /∗ ∗50 ∗ Re torna a chave no f o r m a t o DER
51 ∗52 ∗ @access p u b l i c
53 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
54 ∗ @return mixed A chave no f o r m a t o DER
55 ∗ @throws E x c e p t i o n Quando a chave a inda n o f o i s e t a d a ou e s t i v e r em
Engine
56 ∗ /
57 p u b l i c f u n c t i o n ge tDerEncoded ( )
58 {59 $ r e s u l t = n u l l ;
60 i f ( $ t h i s−>key != n u l l ) {61 / / v e r i f i c a o f o r m a t o a t u a l da chave
62 i f ( $ t h i s−>f o r m a t == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y
: : FORMAT DER) {63 $ r e s u l t = $ t h i s−>key ;
64
65 } e l s e i f ( $ t h i s−>f o r m a t ==
L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : : FORMAT PEM) {66 $ t y p e = $ t h i s−>g e t C o n v e r t e r s T y p e ( ) ;
67 $ r e s u l t = L a b s e c S e c u r i t y U t i l C o n v e r t e r s : :
pemToDer ( $ t h i s−>key , $ t y p e ) ;
68 }69 } e l s e {70 th row new E x c e p t i o n ( ’A chave ainda n o foi setada. O
atributo key nulo. A chave pode estar armazenada em
uma Engine.’ ) ;
71 }
245
72 r e t u r n $ r e s u l t ;
73 }74
75 /∗ ∗76 ∗ Re torna a chave no f o r m a t o PEM
77 ∗78 ∗ @access p u b l i c
79 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
80 ∗ @return mixed A chave no f o r m a t o PEM
81 ∗ @throws E x c e p t i o n Quando a chave a inda n o f o i s e t a d a ou e s t i v e r em
Engine
82 ∗ /
83 p u b l i c f u n c t i o n getPemEncoded ( )
84 {85 $ r e s u l t = n u l l ;
86 i f ( $ t h i s−>key != n u l l ) {87 / / v e r i f i c a o f o r m a t o a t u a l da chave
88 i f ( $ t h i s−>f o r m a t == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y
: : FORMAT PEM) {89 $ r e s u l t = $ t h i s−>key ;
90
91 } e l s e i f ( $ t h i s−>f o r m a t ==
L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : : FORMAT DER) {92 $ t y p e = $ t h i s−>g e t C o n v e r t e r s T y p e ( ) ;
93 $ r e s u l t = L a b s e c C L S e c u r i t y U t i l C o n v e r t e r s
: : derToPem ( $ t h i s−>key , $ t y p e ) ;
94 }95 } e l s e {96 th row new E x c e p t i o n ( ’A chave ainda n o foi setada. O
atributo key nulo. A chave pode estar armazenada em
uma Engine.’ ) ;
97 }98 r e t u r n $ r e s u l t ;
99 }100
101 /∗ ∗102 ∗ Re torna o a l g o r i t m o u t i l i z a d o na chave
103 ∗104 ∗ @access p u b l i c
105 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
106 ∗ @return s t r i n g O a l g o r i t m o u t i l i z a d o
107 ∗ @throws E x c e p t i o n Quando a chave a inda n o f o i s e t a d a ou e s t i v e r em
Engine
246
108 ∗ /
109 p u b l i c f u n c t i o n g e t A l g o r i t h m ( )
110 {111 i f ( $ t h i s−>key != n u l l ) {112 r e t u r n ( s t r i n g ) $ t h i s−>a l g o r i t h m ;
113 } e l s e {114 th row new E x c e p t i o n ( ’A chave ainda n o foi setada. O
atributo key nulo. A chave pode estar armazenada em
uma Engine.’ ) ;
115 }116 }117
118 /∗ ∗119 ∗ Re torna o f o r m a t o da chave
120 ∗121 ∗ @access p u b l i c
122 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
123 ∗ @return s t r i n g O f o r m a t o da chave
124 ∗ @throws E x c e p t i o n Quando a chave a inda n o f o i s e t a d a ou e s t i v e r em
Engine
125 ∗ /
126 p u b l i c f u n c t i o n g e t F o r m a t ( )
127 {128 i f ( $ t h i s−>key != n u l l ) {129 r e t u r n ( s t r i n g ) $ t h i s−>f o r m a t ;
130 } e l s e {131 th row new E x c e p t i o n ( ’A chave ainda n o foi setada. O
atributo key nulo. A chave pode estar armazenada em
uma Engine.’ ) ;
132 }133 }134
135 /∗ ∗136 ∗ Re torna o tamanho da chave
137 ∗138 ∗ @access p u b l i c
139 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
140 ∗ @return i n t O tamanho da chave
141 ∗ @throws E x c e p t i o n Quando a chave a inda n o f o i s e t a d a ou e s t i v e r em
Engine
142 ∗ /
143 p u b l i c f u n c t i o n g e t S i z e ( )
144 {
247
145 i f ( $ t h i s−>key != n u l l ) {146 r e t u r n ( i n t ) $ t h i s−>s i z e ;
147 } e l s e {148 th row new E x c e p t i o n ( ’A chave ainda n o foi setada. O
atributo key nulo. A chave pode estar armazenada em
uma Engine.’ ) ;
149 }150 }151
152 /∗ ∗153 ∗ Re torna a c o n s t a n t e da c l a s s e C o n v e r t e r s que deve s e r passada como
p a r m e t r o
154 ∗155 ∗ @access p r i v a t e
156 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
157 ∗ @return i n t A c o n s t a n t e
158 ∗ /
159 p r i v a t e f u n c t i o n g e t C o n v e r t e r s T y p e ( ) {160 i f ( $ t h i s i n s t a n c e O f L a b s e c S e c u r i t y C r y p t o P u b l i c K e y ) {161 $ t y p e = L a b s e c S e c u r i t y U t i l C o n v e r t e r s : : PUBLIC KEY ;
162 } e l s e i f ( $ t h i s i n s t a n c e O f L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y ) {163 i f ( $ t h i s−>g e t A l g o r i t h m ( ) == s e l f : : ALGORITHM RSA) {164 $ t y p e = L a b s e c S e c u r i t y U t i l C o n v e r t e r s : :
PRIVATE KEY RSA ;
165 } e l s e i f ( $ t h i s−>g e t A l g o r i t h m ( ) == s e l f : : ALGORITHM DSA) {166 $ t y p e = L a b s e c S e c u r i t y U t i l C o n v e r t e r s : :
PRIVATE KEY DSA ;
167 }168 }169 r e t u r n $ t y p e ;
170 }171 } /∗ end o f i n t e r f a c e Assymmetr icKey ∗ /
172
173 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − A s s y m m e t r i c C i p h e r I n t e r f a c e . php
7 ∗8 ∗ $ Id$
248
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ I n t e r f a c e da c l a s s e A s s y m m e t r i c C i p h e r
23 ∗24 ∗ @access p u b l i c
25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 i n t e r f a c e L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c C i p h e r
28 {29
30 /∗ ∗31 ∗ C i f r a um dado com a chave p b l i c a in formada ,
32 ∗ u t i l i z a n d o o a l g o r i t m o no modo d e f i n i d o .
33 ∗34 ∗ @access p u b l i c
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ @param L a b s e c S e c u r i t y C r y p t o R S A P u b l i c K e y A chave p b l i c a que
s e r u t i l i z a d a
37 ∗ @param s t r e a m O dado a s e r c i f r a d o
38 ∗ @return s t r ea m O dado c i f r a d o
39 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o f o r i n v l i d o
40 ∗ /
41 p u b l i c f u n c t i o n e n c r y p t ( L a b s e c S e c u r i t y C r y p t o P u b l i c K e y $key , $ d a t a ) ;
42
43 /∗ ∗44 ∗ D e c i f r a d o um dado com a chave p r i v a d a in formada ,
45 ∗ u t i l i z a n d o o a l g o r i t m o no modo d e f i n i d o .
46 ∗47 ∗ @access p u b l i c
48 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
49 ∗ @param L a b s e c S e c u r i t y C r y p t o R S A P r i v a t e K e y A chave p r i v a d a que
s e r u t i l i z a d a
249
50 ∗ @param s t r ea m O dado a s e r d e c i f r a d o
51 ∗ @param s t r i n g A senha u t i l i z a d a
52 ∗ @return s t r e a m O dado d e c i f r a d o
53 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o f o r i n v l i d o
54 ∗ /
55 p u b l i c f u n c t i o n d e c r y p t ( L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y $key ,
56 $da ta , $passwd = n u l l ) ;
57
58 } /∗ end o f i n t e r f a c e A s s y m m e t r i c C i p h e r ∗ /
59
60 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − K e y P a i r B u i l d e r . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ C l a s s e r e s p o n s v e l p e l a c o n s t r u o de um par de c h av es
23 ∗24 ∗ @access p u b l i c
25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 i n t e r f a c e L a b s e c S e c u r i t y C r y p t o K e y P a i r B u i l d e r
28 {29
30 /∗ ∗31 ∗ C o n s t r u t o r
250
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ @param s t r i n g O a l g o r i t m o da chave
36 ∗ @return v o i d
37 ∗ @throws E x c e p t i o n Quando o t i p o da chave f o r i n v l i d o
38 ∗ /
39 p u b l i c f u n c t i o n c o n s t r u c t ( $ a l g o r i t h m ) ;
40
41 /∗ ∗42 ∗ S e t a o c i f r a d o r que s e r u t i l i z a d o para c i f r a r o par de ch a ve s
43 ∗44 ∗ @access p u b l i c
45 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
46 ∗ @param s t r i n g O nome do c i f r a d o r que s e r u t i l i z a d o
47 ∗ @return v o i d
48 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o n o f o r um a l g o r i t m o
s i m t r i c o v l i d o
49 ∗ /
50 p u b l i c f u n c t i o n s e t C i p h e r ( $ c i p h e r ) ;
51
52 /∗ ∗53 ∗ S e t a a senha que s e r u t i l i z a d a para c i f r a r o par de ch a ve s que
s e r gerada
54 ∗55 ∗ @access p u b l i c
56 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
57 ∗ @param s t r i n g A senha
58 ∗ @return v o i d
59 ∗ /
60 p u b l i c f u n c t i o n s e t P a s s w d ( $passwd ) ;
61
62 /∗ ∗63 ∗ S e t a o tamanho do par de ch av es que s e r gerado
64 ∗65 ∗ @access p u b l i c
66 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
67 ∗ @param i n t O tamanho da chave
68 ∗ @return v o i d
69 ∗ @throws E x c e p t i o n Quando o tamanho da chave f o r menos ou i g u a l a 0
70 ∗ /
71 p u b l i c f u n c t i o n s e t S i z e ( $ s i z e ) ;
72
251
73 /∗ ∗74 ∗ S e t a a e n g i n e e o i d e n t i f i c a d o r da chave que s e r u t i l i z a d o
75 ∗76 ∗ @access p u b l i c
77 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
78 ∗ @param L a b s e c S e c u r i t y E n g i n e H s m A e n g i n e que s e r u t i l i z a d o
79 ∗ @param s t r i n g O i d e n t i f i c a d o r da chave
80 ∗ @return v o i d
81 ∗ @throws E x c e p t i o n Quando o i d e n t i f i c a d o r da chave f o r nu lo
82 ∗ /
83 p u b l i c f u n c t i o n s e t E n g i n e ( L a b s e c S e c u r i t y E n g i n e H s m $engine , $keyName )
;
84
85 /∗ ∗86 ∗ Re torna o par de ch av es c r i a d o
87 ∗88 ∗ @access p u b l i c
89 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
90 ∗ @param s t r i n g argumentos e x t r a s para serem u t i l i z a d o s
91 ∗ @return L a b s e c C L S e c u r i t y C r y p t o K e y P a i r C L O par de c ha v es
92 ∗ @throws E x c e p t i o n Quando o t i p o da chave f o r i n v l i d o
93 ∗ /
94 p u b l i c f u n c t i o n g e t K e y P a i r ( $ e x t r a A r g s = n u l l ) ;
95
96 } /∗ end o f K e y P a i r B u i l d e r ∗ /
97
98 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − S i g n e r I n t e r f a c e . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
252
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ I n t e r f a c e da c l a s s e S i g n e r
23 ∗24 ∗ @access p u b l i c
25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 i n t e r f a c e L a b s e c S e c u r i t y C r y p t o S i g n e r
28 {29 /∗ ∗30 ∗ A s s i n a o hash de um dado
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ @param s t r i n g O a l g o r i t m o que s e r u t i l i z a d o na a s s i n a t u r a
35 ∗ @param L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y A chave p r i v a d a no f o r m a t o
PEM
36 ∗ @param s t r e a m O hash do dado
37 ∗ @param s t r i n g A senha da chave p r i v a d a
38 ∗ @return s t r ea m O hash a s s i n a d o
39 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o de a s s i n a t u r a n o f o r v l i d o
40 ∗ /
41 p u b l i c f u n c t i o n s i g n ( $ s i g n A l g o r i t h m ,
42 L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y
$ p r i v a t e K e y ,
43 $hash , $passwd = NULL) ;
44
45 /∗ ∗46 ∗ V e r i f i c a a a s s i n a t u r a de um hash
47 ∗48 ∗ @access p u b l i c
49 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
50 ∗ @param s t r ea m O hash a s s i n a d o
51 ∗ @param s t r i n g O a l g o r i t m o que f o i u t i l i z a d o na a s s i n a t u r a
52 ∗ @param s t r ea m O hash do a r q u i v o o r i g i n a l
53 ∗ @param L a b s e c S e c u r i t y C r y p t o P u b l i c K e y A chave p b l i c a no f o r m a t o
PEM
54 ∗ @return boo lean TRUE caso o v a l o r de $ s i g n a t u r e s e j a i g u a l
a s s i n a t u r a do $hash ,
253
55 ∗ FALSE caso s e j a d i f e r e n t e
56 ∗ /
57 p u b l i c f u n c t i o n v e r i f y ( $ s i g n a t u r e , $ s i g n A l g o r i t h m , $hash ,
58 L a b s e c S e c u r i t y C r y p t o P u b l i c K e y
$pub l i cKey ) ;
59
60 } /∗ end o f i n t e r f a c e S i g n e r ∗ /
61
62 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − M e s s a g e D i g e s t I n t e r f a c e . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ I n t e r f a c e da c l a s s e MessageDiges t .
23 ∗24 ∗ @access p u b l i c
25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 i n t e r f a c e L a b s e c S e c u r i t y C r y p t o M e s s a g e D i g e s t
28 {29 /∗ ∗30 ∗ C o n s t r u t o r
31 ∗ C o n s t r o i um o b j e t o L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L
32 ∗33 ∗ @access p u b l i c
254
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ @return v o i d
36 ∗ /
37 p u b l i c f u n c t i o n c o n s t r u c t ( ) ;
38
39 /∗ ∗40 ∗ I n i c i a l i z a e s t r u t u r a s de resumos do OpenSSL
41 ∗42 ∗ @access p u b l i c
43 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
44 ∗ @param s t r i n g A l g o r i t m o de resumo
45 ∗ @return v o i d
46 ∗ @throws E x c e p t i o n Quando o e s t a d o do s i s t e m a n o f o r v l i d o
47 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o n o f o r v l i d o
48 ∗ /
49 p u b l i c f u n c t i o n i n i t ( $ h a s h A l g o r i t h m = s e l f : : ALGORITHM SHA1) ;
50
51 /∗ ∗52 ∗ D e f i n e o c o n t e d o de e n t r a d a f u n o de resumo
53 ∗54 ∗ @access p u b l i c
55 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
56 ∗ @param s t r i n g C o n t e d o para resumo
57 ∗ @return v o i d
58 ∗ @throws E x c e p t i o n Quando o e s t a d o do s i s t e m a n o f o r v l i d o
59 ∗ /
60 p u b l i c f u n c t i o n u p d a t e ( $ d a t a ) ;
61
62 /∗ ∗63 ∗ R e a l i z a resumo c r i p t o g r f i c o .
64 ∗ Caso $da ta f o r d i f e r e n t e de NULL , r e a l i z a a t u a l i z a o do c o n t e x t o
65 ∗ e f a z resumo c r i p t o g r f i c o . E q u i v a l e n t e a f a z e r up da t e ( $da ta ) e , em
66 ∗ segu ida , d o F i n a l ( )
67 ∗68 ∗ @access p u b l i c
69 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
70 ∗ @param s t r i n g C o n t e d o para resumo
71 ∗ @return s t r i n g O resumo c a l c u l a d o
72 ∗ @throws E x c e p t i o n Quando o e s t a d o do s i s t e m a n o f o r v l i d o
73 ∗ /
74 p u b l i c f u n c t i o n d o F i n a l ( $ d a t a = n u l l ) ;
75
76 /∗ ∗
255
77 ∗ Re torna a l g o r i t m o de resumo s e l e c i o n a d o
78 ∗79 ∗ @access p u b l i c
80 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
81 ∗ @return s t r i n g A l g o r i t m o de resumo s e l e c i o n a d o
82 ∗ /
83 p u b l i c f u n c t i o n g e t A l g o r i t h m ( ) ;
84
85
86
87 } /∗ end o f i n t e r f a c e MessageDiges t ∗ /
88
89 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − S y m m e t r i c K e y I n t e r f a c e . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 r e q u i r e o n c e ( ’LabsecCL/Security/Crypto/SymmetricCipherCL.php’ ) ;
23
24 /∗ ∗25 ∗ I n t e r f a c e da c l a s s e Symmetr icKey
26 ∗27 ∗ @access p u b l i c
28 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
29 ∗ /
256
30 i n t e r f a c e L a b s e c S e c u r i t y C r y p t o S y m m e t r i c K e y
31 {32
33 c o n s t SIZE DEFAULT = 1024 ;
34
35 /∗ ∗36 ∗ Gera uma chave s i m t r i c a
37 ∗38 ∗ @access p u b l i c
39 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
40 ∗ @param s t r i n g O a l g o r i t m o que s e r u t i l i z a d o na g e r a o
41 ∗ @param i n t O tamanho da chave que s e r gerada
42 ∗ @return v o i d
43 ∗ @throws E x c e p t i o n Quando o tamanho da chave n o f o r v l i d o
44 ∗ /
45 p u b l i c f u n c t i o n gene ra t eSymmet r i cKey ( $ s i z e = s e l f : : SIZE DEFAULT ,
46 $ a l g o r i t h m =
L a b s e c S e c u r i t y C r y p t o S y m m e t r i c C i p h e r : :
ALGORITHM DES EDE3) ;
47
48 /∗ ∗49 ∗ S e t a uma chave com os s e u s p a r m e t r o s
50 ∗51 ∗ @access p u b l i c
52 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
53 ∗ @param mixed A chave p r o p r i a m e n t e d i t a
54 ∗ @param s t r i n g O a l g o r i t m o u t i l i z a d o na chave
55 ∗ @param i n t O tamanho da chave
56 ∗ @param s t r i n g O f o r m a t o da chave
57 ∗ @return v o i d
58 ∗ @throws E x c e p t i o n Quando o tamanho da chave in fo rmado f o r i n v l i d o
59 ∗ /
60 p u b l i c f u n c t i o n loadKey ( $key , $ s i z e = s e l f : : SIZE DEFAULT ,
61 $ a l g o r i t h m =
L a b s e c S e c u r i t y C r y p t o S y m m e t r i c C i p h e r : :
ALGORITHM DES EDE3) ;
62
63 /∗ ∗64 ∗ Re torna a chave
65 ∗66 ∗ @access p u b l i c
67 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
68 ∗ @return s t r i n g A chave
257
69 ∗ /
70 p u b l i c f u n c t i o n ge tEncoded ( ) ;
71
72 /∗ ∗73 ∗ Re torna o a l g o r i t m o u t i l i z a d o na chave
74 ∗75 ∗ @access p u b l i c
76 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
77 ∗ @return s t r i n g O a l g o r i t m o u t i l i z a d o
78 ∗ /
79 p u b l i c f u n c t i o n g e t A l g o r i t h m ( ) ;
80
81 /∗ ∗82 ∗ Re torna o tamanho da chave
83 ∗84 ∗ @access p u b l i c
85 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
86 ∗ @return i n t O tamanho da chave
87 ∗ /
88 p u b l i c f u n c t i o n g e t S i z e ( ) ;
89
90 } /∗ end o f i n t e r f a c e Symmetr icKey ∗ /
91
92 ?>
1 <?php
2 / / TODO FAZER DOCUMENTA O
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − c l a s s . C o n v e r t e r s . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 8 : 4 5
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {
258
19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 /∗ ∗23 ∗ C l a s s e u t i l i t r i a com c o n v e r s o r e s
24 ∗25 ∗ @access p u b l i c
26 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
27 ∗ /
28 c l a s s L a b s e c S e c u r i t y U t i l C o n v e r t e r s
29 {30 c o n s t CERTIFICATE = 1 ;
31
32 c o n s t REQUEST = 2 ;
33
34 c o n s t PRIVATE KEY RSA = 3 ;
35
36 c o n s t PRIVATE KEY DSA = 4 ;
37
38 c o n s t PUBLIC KEY = 5 ;
39
40 c o n s t CRL = 6 ;
41
42 p u b l i c s t a t i c f u n c t i o n pemToDer(& $da ta , $ t y p e ) {43
44 / / pega o i n c i o e f i m
45 s wi t c h ( $ t y p e ) {46 case 1 :
47 $beg in = "CERTIFICATE -----" ;
48 $end = "-----END" ;
49 break ;
50
51 case 2 :
52 / / TODO TERMINAR
53 ;
54 break ;
55
56 case (3 o r 4 o r 5 ) :
57 $beg in = "KEY-----" ;
58 $end = "-----END" ;
59 break ;
60
61 case 6 :
259
62 $beg in = "X509 CRL-----" ;
63 $end = "-----END" ;
64 break ;
65
66 d e f a u l t :
67 th row new E x c e p t i o n ( ’ P a r m e t r o type
i n v l i d o .’ ) ;
68 break ;
69 }70
71 / / f a z a c o n v e r s o
72 $pem data = s u b s t r ( $da ta , s t r p o s ( $da ta , $b eg in ) + s t r l e n (
$be g i n ) ) ;
73 $pem data = s u b s t r ( $pem data , 0 , s t r p o s ( $pem data , $end ) ) ;
74 $d e r = base64 decode ( $pem data ) ;
75
76 r e t u r n $de r ;
77 }78
79 p u b l i c s t a t i c f u n c t i o n derToPem(& $da ta , $ t y p e ) {80
81 / / pega o i n c i o e f i m
82 s wi t c h ( $ t y p e ) {83 case 1 :
84 $ p e m I n i c i o = "-----BEGIN CERTIFICATE -----" ;
85 $pemFina l = "-----END CERTIFICATE -----" ;
86 break ;
87
88 case 2 :
89 / / TODO TERMINAR
90 ;
91 break ;
92
93 case 3 :
94 $beg in = "-----BEGIN RSA PRIVATE KEY-----" ;
95 $end = "-----END RSA PRIVATE KEY-----" ;
96 break ;
97
98 case 4 :
99 $beg in = "-----BEGIN DSA PRIVATE KEY-----" ;
100 $end = "-----END DSA PRIVATE KEY-----" ;
101 break ;
102
260
103 case 5 :
104 $beg in = "-----BEGIN PUBLIC KEY-----" ;
105 $end = "-----END PUBLIC KEY-----" ;
106 break ;
107
108 case 6 :
109 $beg in = "-----BEGIN X509 CRL-----" ;
110 $end = "-----END X509 CRL-----" ;
111 break ;
112
113 d e f a u l t :
114 th row new E x c e p t i o n ( ’ P a r m e t r o type
i n v l i d o .’ ) ;
115 break ;
116 }117
118 / / f a z a c o n v e r s o
119 $pem = c h u n k s p l i t ( base64 encode ( $ d a t a ) , 64 , "\n" ) ;
120 $pem = $b eg in . "\n" . $pem . $end . "\n" ;
121
122 r e t u r n $pem ;
123 }124 }125
126 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − LDAP . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 0 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {
261
18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20 /∗ ∗21 ∗ C l a s s e r e s p o n s v e l p e l o s u p o r t e a LDAP
22 ∗23 ∗ @access p u b l i c
24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 c l a s s Labsec Ut i l LDAP
27 {28 /∗ ∗29 ∗ M t o d o r e s p o n s v e l p e l a g e r a o do a r q u i v o LDIF
30 ∗31 ∗ @access p u b l i c
32 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
33 ∗ @param a r r a y Um a r r a y de o b j e t o s
L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e
34 ∗ @param s t r i n g r v o r e de d i r e t r i o s , da AC , que s e r i n s e r i d o no
a r q u i v o l d i f
35 ∗ um exemplo s e r i a : ”dc=l a b s e c , dc=u f s c , dc=br ”
36 ∗ @return s t r i n g O t e x t o para o a r q u i v o l d i f
37 ∗ /
38 p u b l i c f u n c t i o n g e t L d i f ( $ c e r t i f i c a d o s , $ d i r e t o r i o A r v o r e )
39 {40 $ r e g i s t r o s = "" ;
41 $cn = "" ;
42 $sn = "" ;
43 $mai l = "" ;
44
45 $o id = new L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
46 $ b a s i c C o n s t r a i n t s = $oid−>g e t O b j e c t I d e n t i f i e r (
47 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y
: : EXTENSION BASIC CONSTRAINTS ) ;
48
49 / / I n s e r e as e n t r a d a s c o r r e s p o n d e n t e s aos c e r t i f i c a d o s
50 foreach ( $ c e r t i f i c a d o s as $ c e r t i f i c a d o ) {51
52 / / Guarda v a l o r TRUE , caso o c e r t i f i c a d o f o r de uma CA ,
FALSE caso c o n t r r i o
53 $isCA = $ c e r t i f i c a d o −>g e t E x t e n s i o n ( $ b a s i c C o n s t r a i n t s )−>isCA
( ) ;
54
55 / / Pega o PRIMEIRO campo COMMON NAME do c e r t i f i c a d o
262
56 / / TODO pode e x i s t i r mais de um campo cn , por exemplo ,
r e f e r e n t e a um mesmo c e r t i f i c a d o no l d i f ???
57 $ r d n s = $ c e r t i f i c a d o −>g e t S u b j e c t ( )−>g e t E n t r i e s ( ) ;
58 foreach ( $ r d n s as $chaveCN )
59 {60 i f ( $chaveCN [ ’type’ ] ==
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e
: :COMMON NAME) {61 $cn = $chaveCN [ ’value’ ] ;
62 break ;
63 }64 }65
66 / / Pega o PRIMEIRO campo SURNAME do c e r t i f i c a d o
67 / / TODO pode e x i s t i r mais de um campo cn , por exemplo ,
r e f e r e n t e a um mesmo c e r t i f i c a d o no l d i f ???
68 $ r d n s = $ c e r t i f i c a d o −>g e t S u b j e c t ( )−>g e t E n t r i e s ( ) ;
69 foreach ( $ r d n s as $chaveCN )
70 {71 i f ( $chaveCN [ ’type’ ] ==
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e
: :COMMON NAME) {72 $cn = $chaveCN [ ’value’ ] ;
73 break ;
74 }75 }76
77 / / Pega o PRIMEIRO campo MAIL do c e r t i f i c a d o
78 / / TODO pode e x i s t i r mais de um campo cn , por exemplo ,
r e f e r e n t e a um mesmo c e r t i f i c a d o no l d i f ???
79 $ r d n s = $ c e r t i f i c a d o −>g e t S u b j e c t ( )−>g e t E n t r i e s ( ) ;
80 foreach ( $ r d n s as $chaveCN )
81 {82 i f ( $chaveCN [ ’type’ ] ==
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e
: : EMAIL) {83 $mai l = $chaveCN [ ’value’ ] ;
84 break ;
85 }86 }87
88 / / Pega o n m e r o s e r i a do s e r t i f i c a d o
89 $ s e r i a l N u m b e r = $ c e r t i f i c a d o −>g e t S e r i a l N u m b e r ( ) ;
263
90
91 / / C o m e a a g e r a r o l d i f do c e r t i f i c a d o
92 $ e n t r a d a = "dn: cn= $cn, $diretorioArvore \n
93 objectClass: top \n
94 objectclass: inetOrgPerson
\n" ;
95
96 i f ( $isCA ) {97 $ e n t r a d a . = "objectclass: Person \n" ;
98 } e l s e {99 $ e n t r a d a . = "objectclass: pkiCA \n" ;
100 }101
102 $ e n t r a d a . = "cn: $cn \n
103 sn: $sn \n
104 serialNumber: $serialNumber
\n
105 mail: = $mail" ;
106
107 / / TODO q u a i s o u t r o s dados i r o s e r
d i s p o n i b i l i z a d o s no d i r e t r i o ??? f i n g e r p r i n t ,
i s s u e r . . .
108
109 $ c e r t b a s e 6 4 = $ c e r t i f i c a d o −>getPem ( ) ;
110 i f ( $isCA ) {111 $ e n t r a d a . = " cACertificate;binary::
$cert_base64" ;
112 } e l s e {113 $ e n t r a d a . = " userCertificate;binary:: $cert_base64
" ;
114 }115
116 $ r e g i s t r o s . = tr im ( $ e n t r a d a ) . "\n\n" ;
117
118 }119
120 r e t u r n $ r e g i s t r o s ;
121
122 }123
124 } /∗ end o f c l a s s LDAP ∗ /
125
126 ?>
264
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − Engine . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f t e s t e .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ I n t e r f a c e da c l a s s e Engine
23 ∗24 ∗ @access p u b l i c
25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 i n t e r f a c e L a b s e c S e c u r i t y E n g i n e H s m
28 {29
30 /∗ ∗31 ∗ C o n s t r u t o r
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ @param s t r i n g E n d e r e o (HOST) do HSM
36 ∗ @param s t r i n g I d e n t i f i c a d o ( ID ) do HSM
37 ∗ @return v o i d
38 ∗ @throws E x c e p t i o n Quando $ e n g i n e P a t h n o v a l i d o
39 ∗ @throws E x c e p t i o n Quando $ e n g i n e I d n o v a l i d o
40 ∗ /
41 p u b l i c f u n c t i o n c o n s t r u c t ( $ e n g i n e P a t h , $ e n g i n e I d ) ;
265
42
43 /∗ ∗44 ∗ S e t a o ID do HSM.
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @param s t r i n g o ID do HSM
49 ∗ @return v o i d
50 ∗ /
51 p u b l i c f u n c t i o n s e t I d ( $ i d ) ;
52
53 /∗ ∗54 ∗ Re torna o ID do HSM.
55 ∗56 ∗ @access p u b l i c
57 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
58 ∗ @return s t r i n g O ID do HSM em forma de uma s t r i n g .
59 ∗ Se o ID n o e s t i v e r se tado , d i s p a r a e x c e o
60 ∗61 ∗ /
62 p u b l i c f u n c t i o n g e t I d ( ) ;
63
64 /∗ ∗65 ∗ R e a l i z a um t e s t e de c o n e x o , para v e r i f i c a r se o HSM e s t
respondendo .
66 ∗67 ∗ @access p u b l i c
68 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
69 ∗ @return boo lean TRUE se o HSM e s t i v e r OK.
70 ∗ FALSE se houver algum problema c o n e c t a n d o com o HSM
71 ∗ /
72 p u b l i c f u n c t i o n t e s t I n i t ( ) ;
73
74 /∗ ∗75 ∗ Re torna a l i s t a de comandos d e f i n i d o s para o HSM.
76 ∗77 ∗ @access p u b l i c
78 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
79 ∗ @return a r r a y Array c o n t e n d o os comandos d i s p o n v e i s do HSM
80 ∗ /
81 p u b l i c f u n c t i o n getCommands ( ) ;
82
83 /∗ ∗
266
84 ∗ A d i c i o n a um comando na l i s t a de comandos . Um comando t r a t a d o
85 ∗ como um par ( chave , v a l o r )<br>
86 ∗ Se o comando j e x i s t i r , o v a l o r do comando s u b t i t u d o . <br>
87 ∗ S e n o o comando a d i c i o n a d o ao f i n a l da l i s t a de comandos . <br>
88 ∗89 ∗90 ∗ @access p u b l i c
91 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
92 ∗ @param s t r i n g A ” chave ” do comando
93 ∗ @param s t r i n g O ” v a l o r ” da chave do comando . E s t e p a r m e t r o
o p c i o n a l .
94 ∗ @return v o i d
95 ∗ /
96 p u b l i c f u n c t i o n addCommand ( $key , $ v a l u e = n u l l ) ;
97
98 /∗ ∗99 ∗ Re torna a e n d e r e o do HSM.
100 ∗101 ∗ @access p u b l i c
102 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
103 ∗ @return a r r a y Array c o n t e n d o os comandos d i s p o n v e i s do HSM
104 ∗ /
105 p u b l i c f u n c t i o n g e t E n g i n e P a t h ( ) ;
106
107 } /∗ end o f i n t e r f a c e Engine ∗ /
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − MessageDigestCL . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
267
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 /∗ ∗23 ∗ i n c l u i MessageDiges t
24 ∗25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 r e q u i r e o n c e ( ’Labsec/Security/Crypto/MessageDigestInterface.php’ ) ;
28
29 /∗ ∗30 ∗ Implementa as f u n c i o n a l i d a d e s de resumo c r i p t o g r f i c o .
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ /
35 c l a s s L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L
36 imp lemen t s L a b s e c S e c u r i t y C r y p t o M e s s a g e D i g e s t
37 {38 c o n s t ALGORITHM MD2 = ’MD2’ ;
39
40 c o n s t ALGORITHM MD4 = ’MD4’ ;
41
42 c o n s t ALGORITHM MD5 = ’MD5’ ;
43
44 c o n s t ALGORITHM RIPEMD160 = ’RIPEMD160’ ;
45
46 c o n s t ALGORITHM SHA = ’SHA’ ;
47
48 c o n s t ALGORITHM SHA1 = ’SHA1’ ;
49
50 c o n s t ALGORITHM SHA224 = ’SHA224’ ;
51
52 c o n s t ALGORITHM SHA256 = ’SHA256’ ;
53
54 c o n s t ALGORITHM SHA384 = ’SHA384’ ;
55
56 c o n s t ALGORITHM SHA512 = ’SHA512’ ;
57
58
59 c o n s t STATE NO INIT = 1 ;
60
268
61 c o n s t STATE INIT = 2 ;
62
63 c o n s t STATE UPDATE = 3 ;
64
65
66 p r i v a t e $ s t a t e = s e l f : : STATE NO INIT ;
67
68 p r i v a t e $ a l g o r i t h m = "" ;
69
70 p r i v a t e $ d a t a = "" ;
71
72 /∗ ∗73 ∗ C o n s t r u t o r
74 ∗ C o n s t r o i um o b j e t o L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L
75 ∗76 ∗ @access p u b l i c
77 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
78 ∗ @return v o i d
79 ∗ /
80 p u b l i c f u n c t i o n c o n s t r u c t ( )
81 {82 $ t h i s−>s t a t e = s e l f : : STATE NO INIT ;
83 $ t h i s−>a l g o r i t h m = "" ;
84 $ t h i s−>d a t a = "" ;
85 }86
87 /∗ ∗88 ∗ I n i c i a l i z a e s t r u t u r a s de resumos do OpenSSL
89 ∗90 ∗ @access p u b l i c
91 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
92 ∗ @param s t r i n g A l g o r i t m o de resumo
93 ∗ @return v o i d
94 ∗ @throws E x c e p t i o n Quando o e s t a d o do s i s t e m a n o f o r v l i d o
95 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o n o f o r v l i d o
96 ∗ /
97 p u b l i c f u n c t i o n i n i t ( $ h a s h A l g o r i t h m = s e l f : : ALGORITHM SHA1)
98 {99 i f ( $ t h i s−>s t a t e == s e l f : : STATE NO INIT ) {
100 i f ( ( $ h a s h A l g o r i t h m == s e l f : : ALGORITHM MD2)
101 | | ( $ h a s h A l g o r i t h m == s e l f : : ALGORITHM MD4)
102 | | ( $ h a s h A l g o r i t h m == s e l f : : ALGORITHM MD5)
103 | | ( $ h a s h A l g o r i t h m == s e l f : : ALGORITHM RIPEMD160)
269
104 | | ( $ h a s h A l g o r i t h m == s e l f : : ALGORITHM SHA)
105 | | ( $ h a s h A l g o r i t h m == s e l f : : ALGORITHM SHA1)
106 | | ( $ h a s h A l g o r i t h m == s e l f : : ALGORITHM SHA224)
107 | | ( $ h a s h A l g o r i t h m == s e l f : : ALGORITHM SHA256)
108 | | ( $ h a s h A l g o r i t h m == s e l f : : ALGORITHM SHA384)
109 | | ( $ h a s h A l g o r i t h m == s e l f : : ALGORITHM SHA512) ) {110 $ t h i s−>d a t a = "" ;
111 $ t h i s−>a l g o r i t h m = $ h a s h A l g o r i t h m ;
112 $ t h i s−>s t a t e = s e l f : : STATE INIT ;
113 } e l s e {114 th row new E x c e p t i o n ( ’Algoritmo n o suportado’ ) ;
115 }116 } e l s e {117 th row new E x c e p t i o n ( ’Estado atual do sistema n o
v l i d o ’ ) ;
118 }119 }120
121 /∗ ∗122 ∗ D e f i n e o c o n t e d o de e n t r a d a f u n o de resumo
123 ∗124 ∗ @access p u b l i c
125 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
126 ∗ @param s t r i n g C o n t e d o para resumo
127 ∗ @return v o i d
128 ∗ @throws E x c e p t i o n Quando o e s t a d o do s i s t e m a n o f o r v l i d o
129 ∗ /
130 p u b l i c f u n c t i o n u p d a t e ( $ d a t a )
131 {132 i f ( $ t h i s−>s t a t e != s e l f : : STATE NO INIT ) {133 $ t h i s−>d a t a . = $ d a t a ;
134 $ t h i s−>s t a t e = s e l f : : STATE UPDATE ;
135 } e l s e {136 th row new E x c e p t i o n ( ’Estado atual do sistema n o
v l i d o ’ ) ;
137 }138 }139
140 /∗ ∗141 ∗ R e a l i z a resumo c r i p t o g r f i c o .
142 ∗ Caso $da ta f o r d i f e r e n t e de NULL , r e a l i z a a t u a l i z a o do c o n t e x t o
143 ∗ e f a z resumo c r i p t o g r f i c o . E q u i v a l e n t e a f a z e r up da t e ( $da ta ) e , em
144 ∗ segu ida , d o F i n a l ( )
270
145 ∗146 ∗ @access p u b l i c
147 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
148 ∗ @param s t r i n g C o n t e d o para resumo
149 ∗ @return s t r i n g O resumo c a l c u l a d o
150 ∗ @throws E x c e p t i o n Quando o e s t a d o do s i s t e m a n o f o r v l i d o
151 ∗ /
152 p u b l i c f u n c t i o n d o F i n a l ( $ d a t a = n u l l )
153 {154 $ r e s u l t = n u l l ;
155 i f ( $ t h i s−>s t a t e == s e l f : : STATE UPDATE) {156 i f ( $ d a t a != n u l l ) {157 $ t h i s−>d a t a . = $ d a t a ;
158 }159 $ r e s u l t = l i b c r y p t o s e c c r y p t o g e t h a s h s t r i n g ( $ t h i s−>da ta ,
$ t h i s−>a l g o r i t h m ) ;
160 } e l s e {161 th row new E x c e p t i o n ( ’Estado atual do sistema n o
v l i d o ’ ) ;
162 }163 r e t u r n $ r e s u l t ;
164 }165
166 /∗ ∗167 ∗ Re torna a l g o r i t m o de resumo s e l e c i o n a d o
168 ∗169 ∗ @access p u b l i c
170 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
171 ∗ @return s t r i n g A l g o r i t m o de resumo s e l e c i o n a d o
172 ∗ /
173 p u b l i c f u n c t i o n g e t A l g o r i t h m ( )
174 {175 r e t u r n ( s t r i n g ) $ t h i s−>a l g o r i t h m ;
176 }177
178 } /∗ end o f c l a s s MessageDigestCL ∗ /
179
180 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
271
5 /∗ ∗6 ∗ s g c i − Priva teKeyCL . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 r e q u i r e o n c e ( ’Labsec/Security/Crypto/PrivateKey.php’ ) ;
22 r e q u i r e o n c e ( ’Labsec/Security/Crypto/SymmetricCipher.php’ ) ;
23
24 /∗ ∗25 ∗ C l a s s e Pr iva teKeyCL
26 ∗27 ∗ @access p u b l i c
28 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
29 ∗ /
30 c l a s s L a b s e c C L S e c u r i t y C r y p t o P r i v a t e K e y C L
31 e x t e n d s L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y
32 {33
34 /∗ ∗35 ∗ C o n s t r u t o r .
36 ∗37 ∗ @access p u b l i c
38 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
39 ∗ @param mixed A chave p r o p r i a m e n t e d i t a
40 ∗ @param s t r i n g A senha u t i l i z a d a na c i f r a g e m
41 ∗ @param s t r i n g O f o r m a t o da chave
42 ∗ @param L a b s e c S e c u r i t y E n g i n e H s m A Engine que pode s e r u t i l i z a d a
43 ∗ @param s t r i n g O i d e n t i f i c a d o r da chave da Engine
44 ∗ @return v o i d
45 ∗ @throws E x c e p t i o n Quando o f o r m a t o in fo rmado f o r i n v l i d o
46 ∗ @throws E x c e p t i o n Quando a chave f o r i n v l i d a
47 ∗ /
272
48 p u b l i c f u n c t i o n c o n s t r u c t ( $key , $passwd = n u l l , $ f o r m a t = s e l f : :
FORMAT PEM,
49 L a b s e c S e c u r i t y E n g i n e H s m
$hsm = n u l l ,
$keyName = n u l l )
{50
51 i f ( $hsm == n u l l ) {52 / / XXX
53 / / i f ( l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y i s v a l i d ( $key ,
$passwd ) ) {54 i f ( ( $ f o r m a t ==
L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
FORMAT PEM)
55 | | ( $ f o r m a t ==
L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
FORMAT DER) ) {56 $ t h i s−>s i z e =
l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t s i z e
( $key , $passwd ) ;
57 $ a l g o r i t h m =
l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t a l g o r i t h m
( $key , $passwd ) ;
58
59 $ t h i s−>f o r m a t = $ f o r m a t ;
60 } e l s e {61 th row new E x c e p t i o n ( ’O formato
informado ( p a r m e t r o format)
n o v l i d o . Ele deve ser
PEM ou DER’ ) ;
62 }63 / / } e l s e {64 / / throw new E x c e p t i o n ( ’ Es ta n o uma chave v l i d a
’ ) ;
65 / / }66 } e l s e {67 / / $ t h i s−>s i z e =
l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t s i z e f r o m e n g i n e (
68 / /
$hsm−>g e t E n g i n e P a t h ( ) ,
69 / /
$hsm−>g e t I d ( ) , $keyName ,
273
70 / /
$hsm−>getCommands ( ) ) ;
71 / / $ a l g o r i t h m =
l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t a l g o r i t h m f r o m e n g i n e (
72 / /
$hsm−>g e t E n g i n e P a t h ( ) ,
73 / /
$hsm−>g e t I d ( ) , $keyName ,
74 / /
$hsm−>getCommands ( ) ) ;
75 / / XXX
76 $ t h i s−>s i z e = 1024 ;
77 $ a l g o r i t h m = "RSA" ;
78 }79 i f ( ( $ a l g o r i t h m == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
ALGORITHM RSA)
80 | | ( $ a l g o r i t h m == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
ALGORITHM DSA) ) {81 $ t h i s−>a l g o r i t h m = $ a l g o r i t h m ;
82 $ t h i s−>key = $key ;
83 $ t h i s−>e n g i n e = $hsm ;
84 $ t h i s−>keyName = $keyName ;
85 } e l s e {86 th row new E x c e p t i o n ( ’Esta chave privada n o v l i d a ’ ) ;
87 }88
89 }90
91 /∗ ∗92 ∗ Re torna a chave c i f r a d a no f o r m a t o PEM
93 ∗94 ∗ @access p u b l i c
95 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
96 ∗ @param s t r i n g A senha u t i l i z a d a na c i f r a g e m
97 ∗ @param s t r i n g O nome do c i f r a d o r u t i l i z a d o
98 ∗ @throws E x c e p t i o n Quando o v a l o r de $passwd f o r nu lo
99 ∗ @throws E x c e p t i o n Quando a chave a inda n o f o i s e t a d a ou e s t i v e r em
Engine
100 ∗ /
101 p u b l i c f u n c t i o n ge tEncryp tedPemEncoded ( $passwd ,
102 $ c i p h e r =
L a b s e c S e c u r i t y C r y p t o S y m m e t r i c C i p h e r : :
ALGORITHM DES EDE3) {
274
103 $ r e s u l t = n u l l ;
104 i f ( $ t h i s−>key != n u l l ) {105 i f ( ! ( ( $passwd == "" ) | | ( $passwd == n u l l ) ) ) {106 i f ( L a b s e c C L S e c u r i t y C r y p t o S y m m e t r i c C i p h e r C L : :
v e r i f y A l g o r i t h m ( $ c i p h e r ) ) {107 $ r e s u l t =
l i b c r y p t o s e c c r y p t o e n c r y p t p r i v a t e k e y (
$ t h i s−>getPemEncoded ( ) , $passwd , $ c i p h e r
) ;
108 }109 } e l s e {110 th row new E x c e p t i o n ( ’O p a r m e t r o passwd deve ser
diferente de nulo’ ) ;
111 }112 } e l s e {113 th row new E x c e p t i o n ( ’A chave ainda n o foi gerada. O
atributo key nulo. A chave pode estar armazenada em
uma Engine.’ ) ;
114 }115 r e t u r n $ r e s u l t ;
116 }117
118 } /∗ end o f i n t e r f a c e Pr iva teKeyCL ∗ /
119
120 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − SignerCL . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
275
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 /∗ ∗23 ∗ i n c l u i S i g n e r
24 ∗25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 r e q u i r e o n c e ( ’Labsec/Security/Crypto/SignerInterface.php’ ) ;
28
29 /∗ ∗30 ∗ C l a s s e r e s p o n s v e l p e l a a s s i n a t u r a de um hash e p e l a v e r i f i c a o da
a s s i n a t u r a de um hash
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ /
35 c l a s s L a b s e c C L S e c u r i t y C r y p t o S i g n e r C L
36 imp lemen t s L a b s e c S e c u r i t y C r y p t o S i g n e r
37 {38 /∗ ∗39 ∗ A s s i n a o hash de um dado
40 ∗41 ∗ @access p u b l i c
42 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
43 ∗ @param s t r i n g O a l g o r i t m o que s e r u t i l i z a d o na a s s i n a t u r a
44 ∗ @param L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y A chave p r i v a d a no f o r m a t o
PEM
45 ∗ @param s t r e a m O hash do dado
46 ∗ @param s t r i n g A senha da chave p r i v a d a
47 ∗ @return s t r ea m O hash a s s i n a d o
48 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o de a s s i n a t u r a n o f o r v l i d o
49 ∗ /
50 p u b l i c f u n c t i o n s i g n ( $ s i g n A l g o r i t h m ,
51 L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y
$ p r i v a t e K e y ,
52 $hash , $passwd = NULL)
53 {54 i f ( $ t h i s−>v e r i f y S i g n A l g o r i t h m ( $ s i g n A l g o r i t h m ) ) {55
56 i f ( $ p r i v a t e K e y−>useEng ine ( ) ) {57 / / a s s i n a u t i l i z a n d o a e n g i n e
276
58 $hsm = $ p r i v a t e K e y−>g e t E n g i n e ( ) ;
59 $keyName = $ p r i v a t e K e y−>getKeyName ( ) ;
60 $ s i g n =
l i b c r y p t o s e c c r y p t o s i g n w i t h e n g i n e (
$hash , $ s i g n A l g o r i t h m ,
61 $hsm
−>
g e t E n g i n e P a t h
( )
,
62 $hsm
−>
g e t I d
( )
,
$keyName
,
63 $hsm
−>
getCommands
( )
)
;
64
65 } e l s e {66 $key = $ p r i v a t e K e y−>getPemEncoded ( ) ;
67 $keyAlgor i thm = $ p r i v a t e K e y−>g e t A l g o r i t h m ( ) ;
68 / / a s s i n a o hash
69 $ s i g n = l i b c r y p t o s e c c r y p t o s i g n ( $hash ,
$ s i g n A l g o r i t h m , $keyAlgor i thm , $key , $passwd
) ;
70 }71 r e t u r n $ s i g n ;
72 }73 }74
75 /∗ ∗76 ∗ V e r i f i c a a a s s i n a t u r a de um hash
77 ∗
277
78 ∗ @access p u b l i c
79 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
80 ∗ @param s t r ea m O hash a s s i n a d o
81 ∗ @param s t r i n g O a l g o r i t m o que f o i u t i l i z a d o na a s s i n a t u r a
82 ∗ @param s t r ea m O hash do a r q u i v o o r i g i n a l
83 ∗ @param L a b s e c S e c u r i t y C r y p t o P u b l i c K e y A chave p b l i c a no f o r m a t o
PEM
84 ∗ @return boo lean TRUE caso o v a l o r de $ s i g n a t u r e s e j a i g u a l
a s s i n a t u r a do $hash ,
85 ∗ FALSE caso s e j a d i f e r e n t e
86 ∗ /
87 p u b l i c f u n c t i o n v e r i f y ( $ s i g n a t u r e , $ s i g n A l g o r i t h m , $hash ,
88 L a b s e c S e c u r i t y C r y p t o P u b l i c K e y
$pub l i cKey )
89 {90 / / v e r i f i c a se $ a l g o r i t h m eh s u p o r t a d o
91 i f ( $ t h i s−>v e r i f y S i g n A l g o r i t h m ( $ s i g n A l g o r i t h m ) ) {92 $key = $publ icKey−>getPemEncoded ( ) ;
93 $keyAlgor i thm = $publ icKey−>g e t A l g o r i t h m ( ) ;
94
95 $ v e r i f y =
l i b c r y p t o s e c c r y p t o v e r i f y s i g n a t u r e (
$ s i g n a t u r e , $hash ,
96 $ s i g n A l g o r i t h m
,
$keyAlgor i thm
,
97 $key
)
;
98 r e t u r n ( boo l ) $ v e r i f y ;
99 }100 }101
102 /∗ ∗103 ∗ V e r i f i c a se o a l g o r i t m o de a s s i n a t u r a v l i d o
104 ∗105 ∗ @access p r i v a t e
106 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
107 ∗ @param s t r i n g O a l g o r i t m o
278
108 ∗ @return b oo l TRUE se o a l g o r i t m o f o r v l i d o , FALSE caso c o n t r r i o
109 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o f o r i n v l i d o
110 ∗ /
111 p r i v a t e f u n c t i o n v e r i f y S i g n A l g o r i t h m ( $ h a s h A l g o r i t h m ) {112 $ r e s u l t = n u l l ;
113 i f ( ( $ h a s h A l g o r i t h m == L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L : :
ALGORITHM MD2)
114 | | ( $ h a s h A l g o r i t h m ==
L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L : : ALGORITHM MD4)
115 | | ( $ h a s h A l g o r i t h m ==
L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L : : ALGORITHM MD5)
116 | | ( $ h a s h A l g o r i t h m ==
L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L : :
ALGORITHM RIPEMD160)
117 | | ( $ h a s h A l g o r i t h m ==
L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L : : ALGORITHM SHA)
118 | | ( $ h a s h A l g o r i t h m ==
L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L : : ALGORITHM SHA1
)
119 | | ( $ h a s h A l g o r i t h m ==
L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L : :
ALGORITHM SHA224)
120 | | ( $ h a s h A l g o r i t h m ==
L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L : :
ALGORITHM SHA256)
121 | | ( $ h a s h A l g o r i t h m ==
L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L : :
ALGORITHM SHA384)
122 | | ( $ h a s h A l g o r i t h m ==
L a b s e c C L S e c u r i t y C r y p t o M e s s a g e D i g e s t C L : :
ALGORITHM SHA512) ) {123 $ r e s u l t = t rue ;
124 } e l s e {125 $ r e s u l t = f a l s e ;
126 th row new E x c e p t i o n ( "Algoritmo informado n o v l i d o ." )
;
127 }128 r e t u r n $ r e s u l t ;
129 }130
131 } /∗ end o f c l a s s SignerCL ∗ /
132
133 ?>
279
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − Assymmetr icCipherCL . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 /∗ ∗23 ∗ i n c l u i A s s y m e t r i c C i p h e r
24 ∗25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 r e q u i r e o n c e ( ’Labsec/Security/Crypto/AssymmetricCipherInterface.php’ ) ;
28
29 /∗ ∗30 ∗ C l a s s e r e s p o n v e l p e l a c i f r a g e m a s s i m t r i c a , u t i l i z a n d o ch av es
a s s i m t r i c a s .
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ /
35 c l a s s L a b s e c C L S e c u r i t y C r y p t o A s s y m m e t r i c C i p h e r C L
36 imp lemen t s L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c C i p h e r
37 {38
39 /∗ ∗40 ∗ C i f r a um dado com a chave p b l i c a in formada ,
280
41 ∗ u t i l i z a n d o o a l g o r i t m o no modo d e f i n i d o .
42 ∗43 ∗ @access p u b l i c
44 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
45 ∗ @param L a b s e c S e c u r i t y C r y p t o R S A P u b l i c K e y A chave p b l i c a que
s e r u t i l i z a d a
46 ∗ @param s t r e a m O dado a s e r c i f r a d o
47 ∗ @return s t r ea m O dado c i f r a d o
48 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o f o r i n v l i d o
49 ∗ /
50 p u b l i c f u n c t i o n e n c r y p t ( L a b s e c S e c u r i t y C r y p t o P u b l i c K e y $key , $ d a t a )
51 {52 / / t r y {53 $ r e s u l t = n u l l ;
54 i f ( $key−>g e t A l g o r i t h m ( ) ==
L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : : ALGORITHM RSA) {55 $ r e s u l t = l i b c r y p t o s e c c r y p t o a s s y m m e t r i c e n c r y p t s t r e a m (
$key−>getPemEncoded ( ) ,
56 $ d a t a
)
;
57 } e l s e {58 th row new E x c e p t i o n ( ’A chave deve ser RSA.’ ) ;
59 }60
61 r e t u r n $ r e s u l t ;
62 / / } c a t c h ( E x c e p t i o n $e ) {63 / / echo ’ Tipo Excecao : ’ . $e−>ge tMessage ( ) ;
64 / / }65 }66
67 /∗ ∗68 ∗ D e c i f r a d o um dado com a chave p r i v a d a in formada ,
69 ∗ u t i l i z a n d o o a l g o r i t m o no modo d e f i n i d o .
70 ∗71 ∗ @access p u b l i c
72 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
73 ∗ @param L a b s e c S e c u r i t y C r y p t o R S A P r i v a t e K e y A chave p r i v a d a que
s e r u t i l i z a d a
74 ∗ @param s t r ea m O dado a s e r d e c i f r a d o
75 ∗ @param s t r i n g A senha u t i l i z a d a
76 ∗ @return s t r e a m O dado d e c i f r a d o
281
77 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o f o r i n v l i d o
78 ∗ /
79 p u b l i c f u n c t i o n d e c r y p t ( L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y $key ,
80 $da ta , $passwd = n u l l )
81 {82 / / t r y {83 / / TODO e com e n g i n e ??? e com chave c i f r a d a ???
84 $ r e s u l t = n u l l ;
85 i f ( $key−>g e t A l g o r i t h m ( ) ==
L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : : ALGORITHM RSA) {86
87 $ r e s u l t = l i b c r y p t o s e c c r y p t o a s s y m m e t r i c d e c r y p t ( $da ta
, $key−>getPemEncoded ( ) ,
88 $passwd
)
;
89 } e l s e {90 th row new E x c e p t i o n ( ’A chave deve ser RSA.’ ) ;
91 }92
93 r e t u r n $ r e s u l t ;
94 / / } c a t c h ( E x c e p t i o n $e ) {95 / / echo ’ Tipo Excecao : ’ . $e−>ge tMessage ( ) ;
96 / / }97 }98
99 } /∗ end o f c l a s s A s s y m e t r i c C i p h e r C L ∗ /
100
101 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − PublicKeyCL . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
282
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 r e q u i r e o n c e ( ’Labsec/Security/Crypto/PublicKey.php’ ) ;
22
23 /∗ ∗24 ∗ C l a s s e Publ icKeyCL
25 ∗26 ∗ @access p u b l i c
27 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
28 ∗ /
29 c l a s s L a b s e c C L S e c u r i t y C r y p t o P u b l i c K e y C L
30 e x t e n d s L a b s e c S e c u r i t y C r y p t o P u b l i c K e y
31 {32 /∗ ∗33 ∗ C o n s t r u t o r .
34 ∗35 ∗ @access p u b l i c
36 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
37 ∗ @param mixed A chave p r o p r i a m e n t e d i t a
38 ∗ @param s t r i n g O f o r m a t o da chave
39 ∗ @return v o i d
40 ∗ @throws E x c e p t i o n Quando o f o r m a t o in fo rmado f o r i n v l i d o
41 ∗ @throws E x c e p t i o n Quando a chave n o f o r do t i p o v l i d o
42 ∗ /
43 p u b l i c f u n c t i o n c o n s t r u c t ( $key , $ f o r m a t = s e l f : : FORMAT PEM) {44 $ a l g o r i t h m = l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t a l g o r i t h m ( $key
) ;
45 / / XXX
46 / / i f ( l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y i s v a l i d ( $key , $passwd ) ) {47 i f ( ( $ a l g o r i t h m == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
ALGORITHM DSA)
48 | | ( $ a l g o r i t h m == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
ALGORITHM RSA) ) {49 i f ( ( $ f o r m a t ==
L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
FORMAT PEM)
283
50 | | ( $ f o r m a t ==
L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
FORMAT DER) ) {51 $ t h i s−>a l g o r i t h m = $ a l g o r i t h m ;
52 $ t h i s−>f o r m a t = $ f o r m a t ;
53 $ t h i s−>key = $key ;
54 $ t h i s−>s i z e =
l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t s i z e
( $key ) ;
55 } e l s e {56 th row new E x c e p t i o n ( ’O formato
informado ( p a r m e t r o format)
n o v l i d o . Ele deve ser
PEM ou DER’ ) ;
57 }58 } e l s e {59 th row new E x c e p t i o n ( ’A chave informada ( p a r m e t r o
key) n o v l i d a ’ ) ;
60 }61 / / } e l s e {62 / / throw new E x c e p t i o n ( ’ Es ta n o uma chave v l i d a ’ ) ;
63 / / }64 }65
66 } /∗ end o f i n t e r f a c e Publ icKeyCL ∗ /
67
68 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − S y m m e t r i c K e y I n t e r f a c e . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
284
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 r e q u i r e o n c e ( ’Labsec/Security/Crypto/SymmetricKeyInterface.php’ ) ;
23 r e q u i r e o n c e ( ’LabsecCL/Security/Crypto/SymmetricCipherCL.php’ ) ;
24
25 /∗ ∗26 ∗ I n t e r f a c e da c l a s s e Symmetr icKey
27 ∗28 ∗ @access p u b l i c
29 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
30 ∗ /
31 c l a s s LabsecCL Secur i ty Cryp to Symmet r i cKeyCL
32 imp lemen t s L a b s e c S e c u r i t y C r y p t o S y m m e t r i c K e y
33 {34 p r i v a t e $ a l g o r i t h m ;
35
36 p r i v a t e $key = n u l l ;
37
38 p r i v a t e $ s i z e ;
39
40 /∗ ∗41 ∗ Gera uma chave s i m t r i c a
42 ∗43 ∗ @access p u b l i c
44 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
45 ∗ @param s t r i n g O a l g o r i t m o que s e r u t i l i z a d o na g e r a o
46 ∗ @param i n t O tamanho da chave que s e r gerada
47 ∗ @return v o i d
48 ∗ @throws E x c e p t i o n Quando o tamanho da chave n o f o r v l i d o
49 ∗ /
50 p u b l i c f u n c t i o n gene ra t eSymmet r i cKey ( $ s i z e = s e l f : : SIZE DEFAULT ,
51 $ a l g o r i t h m =
L a b s e c S e c u r i t y C r y p t o S y m m e t r i c C i p h e r : :
ALGORITHM DES EDE3) {52 i f ( L a b s e c C L S e c u r i t y C r y p t o S y m m e t r i c C i p h e r C L : :
v e r i f y A l g o r i t h m ( $ a l g o r i t h m ) )
53 {54 i f ( $ s i z e > 0) {
285
55 $key =
l i b c r y p t o s e c c r y p t o g e n e r a t e s y m m e t r i c k e y
( $ a l g o r i t h m , $ s i z e ) ;
56 $ t h i s−>loadKey ( $key , $ s i z e , $ a l g o r i t h m ) ;
57 } e l s e {58 th row new E x c e p t i o n ( "O tamanho da chave (
p a r m e t r o size) n o v l i d o " ) ;
59 }60 }61 }62
63 /∗ ∗64 ∗ S e t a uma chave com os s e u s p a r m e t r o s
65 ∗66 ∗ @access p u b l i c
67 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
68 ∗ @param mixed A chave p r o p r i a m e n t e d i t a
69 ∗ @param s t r i n g O a l g o r i t m o u t i l i z a d o na chave
70 ∗ @param i n t O tamanho da chave
71 ∗ @param s t r i n g O f o r m a t o da chave
72 ∗ @return v o i d
73 ∗ @throws E x c e p t i o n Quando o tamanho da chave in fo rmado f o r i n v l i d o
74 ∗ /
75 p u b l i c f u n c t i o n loadKey ( $key , $ s i z e = s e l f : : SIZE DEFAULT ,
76 $ a l g o r i t h m =
L a b s e c S e c u r i t y C r y p t o S y m m e t r i c C i p h e r : :
ALGORITHM DES EDE3) {77 i f ( $ s i z e > 0) {78 i f ( L a b s e c C L S e c u r i t y C r y p t o S y m m e t r i c C i p h e r C L : :
v e r i f y A l g o r i t h m ( $ a l g o r i t h m ) ) {79 $ t h i s−>key = $key ;
80 $ t h i s−>a l g o r i t h m = $ a l g o r i t h m ;
81 $ t h i s−>s i z e = $ s i z e ;
82 }83 } e l s e {84 th row new E x c e p t i o n ( ’O tamanho da chave informado (
p a r m e t r o size) n o v l i d o ’ ) ;
85 }86 }87
88 /∗ ∗89 ∗ Re torna a chave
90 ∗
286
91 ∗ @access p u b l i c
92 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
93 ∗ @return s t r i n g A chave
94 ∗ /
95 p u b l i c f u n c t i o n ge tEncoded ( )
96 {97 r e t u r n $ t h i s−>key ;
98 }99
100 /∗ ∗101 ∗ Re torna o a l g o r i t m o u t i l i z a d o na chave
102 ∗103 ∗ @access p u b l i c
104 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
105 ∗ @return s t r i n g O a l g o r i t m o u t i l i z a d o
106 ∗ /
107 p u b l i c f u n c t i o n g e t A l g o r i t h m ( )
108 {109 r e t u r n ( s t r i n g ) $ t h i s−>a l g o r i t h m ;
110 }111
112 /∗ ∗113 ∗ Re torna o tamanho da chave
114 ∗115 ∗ @access p u b l i c
116 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
117 ∗ @return i n t O tamanho da chave
118 ∗ /
119 p u b l i c f u n c t i o n g e t S i z e ( )
120 {121 r e t u r n ( i n t ) $ t h i s−>s i z e ;
122 }123 } /∗ end o f i n t e r f a c e Symmetr icKey ∗ /
124
125 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − Symmetr icCipherCL . php
287
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 /∗ ∗23 ∗ i n c l u i S y mm e t r i c C ipher
24 ∗25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 r e q u i r e o n c e ( ’Labsec/Security/Crypto/SymmetricCipherInterface.php’ ) ;
28 r e q u i r e o n c e ( ’LabsecCL/Security/Crypto/SymmetricKeyCL.php’ ) ;
29
30 /∗ ∗31 ∗ C l a s s e r e s p o n v e l p e l a c i f r a g e m s i m t r i c a , u t i l i z a n d o chave s i m t r i c a
.
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ /
36 c l a s s L a b s e c C L S e c u r i t y C r y p t o S y m m e t r i c C i p h e r C L
37 imp lemen t s L a b s e c S e c u r i t y C r y p t o S y m m e t r i c C i p h e r
38 {39 /∗ ∗40 ∗ C i f r a um dado com a chave s i m t r i c a in formada ,
41 ∗ u t i l i z a n d o o a l g o r i t m o no modo d e f i n i d o .
42 ∗43 ∗ @access p u b l i c
44 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
45 ∗ @param L a b s e c S e c u r i t y C r y p t o S y m m e t r i c K e y A chave que s e r
u t i l i z a d a
46 ∗ @param s t r i n g O a l g o r i t m o u t i l i z a d o
47 ∗ @param s t r e a m O dado a s e r c i f r a d o
48 ∗ @param s t r i n g O modo de o p e r a o que s e r u t i l i z a d o
288
49 ∗ @return s t r ea m O dado c i f r a d o
50 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o ou o modo de o p e r a o f o r
i n v l i d o
51 ∗ /
52 p u b l i c f u n c t i o n e n c r y p t ( L a b s e c S e c u r i t y C r y p t o S y m m e t r i c K e y $key , $da ta
,
53 $ a l g o r i t h m = s e l f : :
ALGORITHM DES EDE3 ,
54 $opera t ionMode = s e l f : :
MODE CBC) {55 $ r e s u l t = n u l l ;
56 i f ( ( s e l f : : v e r i f y A l g o r i t h m ( $ a l g o r i t h m ) ) && ( $ t h i s−>
v e r i f y O p e r a t i o n M o d e ( $opera t ionMode ) ) ) {57 $ r e s u l t = l i b c r y p t o s e c c r y p t o s y m m e t r i c e n c r y p t s t r e a m ( $key
−>ge tEncoded ( ) , $da ta ,
58 $ a l g o r i t h m
,
$opera t ionMode
)
;
59 }60 r e t u r n $ r e s u l t ;
61 }62
63 /∗ ∗64 ∗ D e c i f r a d o um dado com a chave in formada ,
65 ∗ u t i l i z a n d o o a l g o r i t m o no modo d e f i n i d o .
66 ∗67 ∗ @access p u b l i c
68 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
69 ∗ @param L a b s e c S e c u r i t y C r y p t o S y m m e t r i c K e y A chave que s e r
u t i l i z a d a
70 ∗ @param s t r i n g O a l g o r i t m o u t i l i z a d o
71 ∗ @param s t r e a m O dado a s e r d e c i f r a d o
72 ∗ @param s t r i n g O modo de o p e r a o que s e r u t i l i z a d o
73 ∗ @return s t r ea m O dado d e c i f r a d o
74 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o ou o modo de o p e r a o f o r
i n v l i d o
75 ∗ /
76 p u b l i c f u n c t i o n d e c r y p t ( L a b s e c S e c u r i t y C r y p t o S y m m e t r i c K e y $key , $da ta
,
289
77 $ a l g o r i t h m = s e l f : :
ALGORITHM DES EDE3 ,
78 $opera t ionMode = s e l f : :
MODE CBC) {79 $ r e s u l t = n u l l ;
80 i f ( ( s e l f : : v e r i f y A l g o r i t h m ( $ a l g o r i t h m ) ) && ( $ t h i s−>
v e r i f y O p e r a t i o n M o d e ( $opera t ionMode ) ) ) {81 $ r e s u l t = l i b c r y p t o s e c c r y p t o s y m m e t r i c d e c r y p t ( $key−>
ge tEncoded ( ) , $da ta ,
82 $ a l g o r i t h m
,
$opera t ionMode
)
;
83 }84 r e t u r n $ r e s u l t ;
85 }86
87 /∗ ∗88 ∗ V e r i f i c a se o a l g o r i t m o v l i d o
89 ∗90 ∗ @access p u b l i c
91 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
92 ∗ @param s t r i n g O a l g o r i t m o
93 ∗ @return boo l TRUE se o a l g o r i t m o f o r v l i d o , FALSE caso c o n t r r i o
94 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o f o r i n v l i d o
95 ∗ /
96 p u b l i c s t a t i c f u n c t i o n v e r i f y A l g o r i t h m ( $ a l g o r i t h m ) {97 $ r e s u l t = n u l l ;
98 i f ( ( $ a l g o r i t h m == s e l f : : ALGORITHM AES 128 )
99 | | ( $ a l g o r i t h m == s e l f : : ALGORITHM AES 192 )
100 | | ( $ a l g o r i t h m == s e l f : : ALGORITHM AES 256 )
101 | | ( $ a l g o r i t h m == s e l f : : ALGORITHM DES)
102 | | ( $ a l g o r i t h m == s e l f : : ALGORITHM DES EDE)
103 | | ( $ a l g o r i t h m == s e l f : : ALGORITHM DES EDE3)
104 | | ( $ a l g o r i t h m == s e l f : : ALGORITHM RC2)
105 | | ( $ a l g o r i t h m == s e l f : : ALGORITHM RC4) ) {106 $ r e s u l t = t rue ;
107 } e l s e {108 $ r e s u l t = f a l s e ;
109 th row new E x c e p t i o n ( "Algoritmo informado i n v l i d o ." ) ;
290
110 }111 r e t u r n $ r e s u l t ;
112 }113
114 /∗ ∗115 ∗ V e r i f i c a se o modo de o p e r a o v l i d o
116 ∗117 ∗ @access p r i v a t e
118 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
119 ∗ @param s t r i n g O modo de o p e r a o
120 ∗ @return b oo l TRUE se o modo de o p e r a o f o r v l i d o , FALSE caso
c o n t r r i o
121 ∗ @throws E x c e p t i o n Quando o modo de o p e r a o f o r i n v l i d o
122 ∗ /
123 p r i v a t e f u n c t i o n v e r i f y O p e r a t i o n M o d e ( $opera t ionMode ) {124 $ r e s u l t = n u l l ;
125 i f ( ( $ope ra t ionMode == s e l f : : MODE CBC)
126 | | ( $ope ra t ionMode == s e l f : : MODE ECB)
127 | | ( $ope ra t ionMode == s e l f : : MODE CFB)
128 | | ( $ope ra t ionMode == s e l f : : MODE OFB) ) {129 $ r e s u l t = t rue ;
130 } e l s e {131 $ r e s u l t = f a l s e ;
132 th row new E x c e p t i o n ( "Modo de o p e r a o ( p a r m e t r o
operationMode) n o v l i d o " ) ;
133 }134 r e t u r n $ r e s u l t ;
135 }136
137 } /∗ end o f c l a s s Symmetr icCipherCL ∗ /
138
139 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − K e y P a i r B u i l d e r . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
291
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i Assymmetr icKey
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Crypto/KeyPairBuilderInterface.php’ ) ;
27 r e q u i r e o n c e ( ’Labsec/Security/Crypto/AssymmetricKey.php’ ) ;
28 r e q u i r e o n c e ( ’Labsec/Security/Crypto/SymmetricCipherInterface.php’ ) ;
29
30 /∗ ∗31 ∗ C l a s s e r e s p o n s v e l p e l a c o n s t r u o de um par de c h av es
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ /
36 c l a s s L a b s e c C L S e c u r i t y C r y p t o K e y P a i r B u i l d e r C L
37 imp lemen t s L a b s e c S e c u r i t y C r y p t o K e y P a i r B u i l d e r
38 {39 p r i v a t e $ a l g o r i t h m ;
40
41 p r i v a t e $ c i p h e r = L a b s e c S e c u r i t y C r y p t o S y m m e t r i c C i p h e r : :
ALGORITHM DES EDE3 ;
42
43 p r i v a t e $ f o r m a t = L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : : FORMAT PEM;
44
45 p r i v a t e $passwd = n u l l ;
46
47 p r i v a t e $ s i z e = L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : : SIZE DEFAULT ;
48
49 p r i v a t e $ e n g i n e = n u l l ;
50
51 p r i v a t e $keyName = n u l l ;
52
292
53 /∗ ∗54 ∗ C o n s t r u t o r
55 ∗56 ∗ @access p u b l i c
57 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
58 ∗ @param s t r i n g O a l g o r i t m o da chave
59 ∗ @return v o i d
60 ∗ @throws E x c e p t i o n Quando o t i p o da chave f o r i n v l i d o
61 ∗ /
62 p u b l i c f u n c t i o n c o n s t r u c t ( $ a l g o r i t h m )
63 {64 i f ( ( $ a l g o r i t h m == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
ALGORITHM RSA)
65 | | ( $ a l g o r i t h m == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
ALGORITHM DSA) ) {66 $ t h i s−>a l g o r i t h m = $ a l g o r i t h m ;
67 } e l s e {68 th row new E x c e p t i o n ( "O tipo da chave ( p a r m e t r o type) deve
ser RSA ou DSA" ) ;
69 }70 }71
72 /∗ ∗73 ∗ S e t a o c i f r a d o r que s e r u t i l i z a d o para c i f r a r o par de ch a ve s
74 ∗75 ∗ @access p u b l i c
76 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
77 ∗ @param s t r i n g O nome do c i f r a d o r que s e r u t i l i z a d o
78 ∗ @return v o i d
79 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o n o f o r um a l g o r i t m o
s i m t r i c o v l i d o
80 ∗ /
81 p u b l i c f u n c t i o n s e t C i p h e r ( $ c i p h e r )
82 {83 i f ( L a b s e c C L S e c u r i t y C r y p t o S y m m e t r i c C i p h e r C L : : v e r i f y A l g o r i t h m (
$ c i p h e r ) ) {84 $ t h i s−>c i p h e r = $ c i p h e r ;
85 }86 }87
88 /∗ ∗89 ∗ S e t a a senha que s e r u t i l i z a d a para c i f r a r o par de ch a ve s que
s e r gerada
293
90 ∗91 ∗ @access p u b l i c
92 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
93 ∗ @param s t r i n g A senha
94 ∗ @return v o i d
95 ∗ /
96 p u b l i c f u n c t i o n s e t P a s s w d ( $passwd )
97 {98 $ t h i s−>passwd = $passwd ;
99 }100
101 /∗ ∗102 ∗ S e t a o tamanho do par de ch av es que s e r gerado
103 ∗104 ∗ @access p u b l i c
105 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
106 ∗ @param i n t O tamanho da chave
107 ∗ @return v o i d
108 ∗ @throws E x c e p t i o n Quando o tamanho da chave f o r menos ou i g u a l a 0
109 ∗ /
110 p u b l i c f u n c t i o n s e t S i z e ( $ s i z e )
111 {112 i f ( $ s i z e > 0) {113 $ t h i s−>s i z e = $ s i z e ;
114 } e l s e {115 th row new E x c e p t i o n ( "Tamanho informado i n v l i d o " ) ;
116 }117 }118
119 /∗ ∗120 ∗ S e t a a e n g i n e e o i d e n t i f i c a d o r da chave que s e r u t i l i z a d o
121 ∗122 ∗ @access p u b l i c
123 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
124 ∗ @param L a b s e c S e c u r i t y E n g i n e H s m A e n g i n e que s e r u t i l i z a d o
125 ∗ @param s t r i n g O i d e n t i f i c a d o r da chave
126 ∗ @return v o i d
127 ∗ @throws E x c e p t i o n Quando o i d e n t i f i c a d o r da chave f o r nu lo
128 ∗ /
129 p u b l i c f u n c t i o n s e t E n g i n e ( L a b s e c S e c u r i t y E n g i n e H s m $engine , $keyName )
130 {131 i f ( ( $keyName != "" ) && ( $keyName != n u l l ) ) {132 $ t h i s−>e n g i n e = $ e n g i n e ;
294
133 $ t h i s−>keyName = $keyName ;
134 } e l s e {135 th row new E x c e p t i o n ( "O identificador da chave n o pode ser
nulo" ) ;
136 }137 }138
139 /∗ ∗140 ∗ Re torna o par de ch av es c r i a d o
141 ∗142 ∗ @access p u b l i c
143 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
144 ∗ @param s t r i n g argumentos e x t r a s para serem u t i l i z a d o s
145 ∗ @return L a b s e c C L S e c u r i t y C r y p t o K e y P a i r C L O par de c ha v es
146 ∗ @throws E x c e p t i o n Quando o t i p o da chave f o r i n v l i d o
147 ∗ /
148 p u b l i c f u n c t i o n g e t K e y P a i r ( $ e x t r a A r g s = n u l l )
149 {150 $ k e y P a i r = n u l l ;
151 i f ( $ t h i s−>e n g i n e == n u l l ) {152
153 $key = ( s t r i n g ) l i b c r y p t o s e c c r y p t o g e n e r a t e p r i v a t e k e y (
$ t h i s−>a l g o r i t h m ,
154 $ t h i s
−>
s i z e
,
$ t h i s
−>
c i p h e r
,
155 $ t h i s
−>
passwd
)
;
156 $ k e y P a i r = L a b s e c C L S e c u r i t y C r y p t o K e y P a i r C L : :
l o a d K e y P a i r ( $key , $ t h i s−>passwd ) ;
157
158 } e l s e {
295
159 $ a l g o r i t h m =
l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t a l g o r i t h m f r o m e n g i n e
(
160 $ t h i s
−>
eng ine
−>
g e t E n g i n e P a t h
( )
,
161 $ t h i s
−>
eng ine
−>
g e t I d
( )
,
$ t h i s
−>
keyName
,
162 $ t h i s
−>
eng ine
−>
getCommands
( )
)
;
163 / / XXX
164 / / $ a l g o r i t h m = ”DSA”;
165 i f ( $ a l g o r i t h m == $ t h i s−>a l g o r i t h m ) {166 $ k e y P a i r = L a b s e c C L S e c u r i t y C r y p t o K e y P a i r C L : :
loadKeyPa i rFromEngine ( $ t h i s−>eng ine , $ t h i s−>
keyName ) ;
167 } e l s e {168 th row new E x c e p t i o n ( "A chave informada n o
do tipo definido." ) ;
169 }
296
170 }171
172 r e t u r n $ k e y P a i r ;
173 }174 } /∗ end o f K e y P a i r B u i l d e r ∗ /
175
176 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − KeyPair . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 5 : 4 0 : 2 4
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i Assymmetr icKey
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Crypto/KeyPairInterface.php’ ) ;
27 r e q u i r e o n c e ( ’PrivateKeyCL.php’ ) ;
28 r e q u i r e o n c e ( ’PublicKeyCL.php’ ) ;
29
30 /∗ ∗31 ∗ C l a s s e r e s p o n s v e l p e l o g e r e n c i a m e n t o de um par de c h av es
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ /
297
36 c l a s s L a b s e c C L S e c u r i t y C r y p t o K e y P a i r C L
37 imp lemen t s L a b s e c S e c u r i t y C r y p t o K e y P a i r
38 {39
40 p r i v a t e $pub l i cKey ;
41
42 p r i v a t e $ p r i v a t e K e y ;
43
44 p u b l i c s t a t i c f u n c t i o n l o a d K e y P a i r ( $key , $passwd = n u l l ) {45 $ a l g o r i t h m = l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t a l g o r i t h m ( $key
, $passwd ) ;
46 $ s i z e = l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t s i z e ( $key , $passwd )
;
47
48 / / XXX enquan to que o m d u l o n o implemen tado . . .
49 / / $ a l g o r i t h m = ”RSA”;
50 / / $ s i z e = 1024;
51
52 i f ( ( $ a l g o r i t h m == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
ALGORITHM RSA)
53 | | ( $ a l g o r i t h m == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
ALGORITHM DSA) ) {54 $ p r i v a t e K e y = new L a b s e c C L S e c u r i t y C r y p t o P r i v a t e K e y C L (
$key , $passwd ) ;
55 } e l s e {56 th row new E x c e p t i o n ( ’A chave informada deve ser RSA ou DSA’
) ;
57 }58
59 r e t u r n new L a b s e c C L S e c u r i t y C r y p t o K e y P a i r C L ( $ p r i v a t e K e y , $passwd )
;
60 }61
62 /∗ ∗63 ∗ S e t a a chave como sendo da e n g i n e .
64 ∗65 ∗ @access p u b l i c
66 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
67 ∗ @param L a b s e c S e c u r i t y E n g i n e H s m A e n g i n e
68 ∗ @param s t r i n g O I d e n t i f i c a d o r da chave .
69 ∗ @return L a b s e c C L S e c u r i t y C r y p t o K e y P a i r C L O par de c ha v es
70 ∗ @throws E x c e p t i o n Quando o v a l o r de $keyName f o r nu lo
298
71 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o da chave da e n g i n e n o f o r
s u p o r t a d a p e l a b i b l i o t e c a
72 ∗ /
73 p u b l i c s t a t i c f u n c t i o n loadKeyPa i rF romEngine (
L a b s e c S e c u r i t y E n g i n e H s m $hsm , $keyName ) {74 i f ( ! ( ( $keyName == "" ) | | ( $keyName == n u l l ) ) ) {75 $ a l g o r i t h m =
l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t a l g o r i t h m f r o m e n g i n e
(
76 $hsm
−>
g e t E n g i n e P a t h
( )
,
77 $hsm
−>
g e t I d
( )
,
$keyName
,
78 $hsm
−>
getCommands
( )
)
;
79 $ s i z e =
l i b c r y p t o s e c c r y p t o a s s y m m e t r i c k e y g e t s i z e f r o m e n g i n e
(
80 $hsm
−>
g e t E n g i n e P a t h
( )
,
81 $hsm
−>
g e t I d
299
( )
,
$keyName
,
82 $hsm
−>
getCommands
( )
)
;
83 / / XXX
84 / / $ a l g o r i t h m = ”RSA”;
85 / / $ s i z e = 1024;
86
87 i f ( ( $ a l g o r i t h m ==
L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
ALGORITHM RSA)
88 | | ( $ a l g o r i t h m == L a b s e c S e c u r i t y C r y p t o A s s y m m e t r i c K e y : :
ALGORITHM DSA) ) {89 $ p r i v a t e K e y = new
L a b s e c C L S e c u r i t y C r y p t o P r i v a t e K e y C L ( n u l l , n u l l
, n u l l , $hsm , $keyName ) ;
90 } e l s e {91 th row new E x c e p t i o n ( ’A chave informada deve ser RSA
ou DSA’ ) ;
92 }93
94
95 r e t u r n new L a b s e c C L S e c u r i t y C r y p t o K e y P a i r C L ( $ p r i v a t e K e y ,
n u l l ) ;
96
97 } e l s e {98 th row new E x c e p t i o n ( ’O identificador da chave deve ser
diferente de nulo’ ) ;
99 }100 }101
102 /∗ ∗103 ∗ C o n s t r u t o r
104 ∗
300
105 ∗ @access p u b l i c
106 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
107 ∗ @param L a b s e c S e c u r i t y C r y p t o P u b l i c K e y a chave p b l i c a
108 ∗ @param L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y a chave p r i v a d a
109 ∗ @return v o i d
110 ∗ @throws E x c e p t i o n Quando o t i p o da chave f o r i n v l i d o
111 ∗ /
112 p r i v a t e f u n c t i o n c o n s t r u c t ( L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y
$ p r i v a t e K e y , $passwd = n u l l ) {113 $ t h i s−>p r i v a t e K e y = $ p r i v a t e K e y ;
114 $ t h i s−>pub l i cKey = $ t h i s−>g e t P u b l i c K e y F r o m P r i v a t e K e y (
$ p r i v a t e K e y , $passwd ) ;
115 }116
117 /∗ ∗118 ∗ Re torna uma chave p b l i c a no mesmo f o r m a t o da chave p r i v a d a . No
caso de uma
119 ∗ chave em engine , e l a r e t o r n a r no f o r m a t o PEM
120 ∗121 ∗ @access p u b l i c
122 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
123 ∗ @param s t r i n g A senha que f o i u t i l i z a d a na e n c r i p t a o
124 ∗ @return L a b s e c S e c u r i t y C r y p t o P u b l i c K e y A chave p b l i c a
125 ∗ /
126 p r i v a t e f u n c t i o n g e t P u b l i c K e y F r o m P r i v a t e K e y (
L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y $ p r i v a t e K e y , $passwd = n u l l )
127 {128 / / v e r i f i c a se a chave p r i v a d a e s t em hsm
129 i f ( $ p r i v a t e K e y−>useEng ine ( ) ) {130 $hsm = $ p r i v a t e K e y−>g e t E n g i n e ( ) ;
131 $keyName = $ p r i v a t e K e y−>getKeyName ( ) ;
132 $ r e t =
l i b c r y p t o s e c c r y p t o g e t p u b l i c k e y f r o m e n g i n e (
$hsm−>g e t E n g i n e P a t h ( ) ,
133 $hsm
−>
g e t I d
( )
,
$keyName
,
301
134 $hsm
−>
getCommands
( )
)
;
135 } e l s e {136 $ r e t = l i b c r y p t o s e c c r y p t o g e t p u b l i c k e y (
$ p r i v a t e K e y−>getPemEncoded ( ) , $passwd ) ;
137 }138
139 $pub l i cKey = new L a b s e c C L S e c u r i t y C r y p t o P u b l i c K e y C L ( $ r e t [
’key’ ] ) ;
140
141 r e t u r n $pub l i cKey ;
142 }143
144 /∗ ∗145 ∗ Re torna a chave p b l i c a
146 ∗147 ∗ @access p u b l i c
148 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
149 ∗ @return L a b s e c S e c u r i t y C r y p t o P u b l i c K e y A chave p b l i c a
150 ∗ /
151 p u b l i c f u n c t i o n g e t P u b l i c K e y ( )
152 {153 r e t u r n $ t h i s−>pub l i cKey ;
154 }155
156 /∗ ∗157 ∗ Re torna a chave p r i v a d a
158 ∗159 ∗ @access p u b l i c
160 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
161 ∗ @return L a b s e c S e c u r i t y C r y p t o P r i v a t e c K e y A chave p r i v a d a
162 ∗ /
163 p u b l i c f u n c t i o n g e t P r i v a t e K e y ( )
164 {165 r e t u r n $ t h i s−>p r i v a t e K e y ;
166 }167
168
302
169 } /∗ end o f KeyPair ∗ /
170
171 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ t e s t e − c l a s s . OpenHSMdEngine . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f t e s t e .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 /∗ ∗23 ∗ Implementa a I n t e r f a c e Engine
24 ∗25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 r e q u i r e o n c e ( ’Labsec/Security/Engine/HsmInterface.php’ ) ;
28
29 /∗ ∗30 ∗ Es ta c l a s s e f o i implemen tada para s e r u t i l i z a d a com o HSM
31 ∗ d e s e n v o l v i d o p e l o LabSEC
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ /
36 c l a s s LabsecCL Securi ty Engine OpenHSMdEngineCL
37 imp lemen t s L a b s e c S e c u r i t y E n g i n e H s m
38 {39
303
40 / / ID da Engine . N o tem t i p o , p o i s pode s e r i n t , hexa , e t c
41 p r i v a t e $eng ine ID ;
42 p r i v a t e $ e n g i n e P a t h ;
43 p r i v a t e $commands = array ( ) ;
44
45 /∗ ∗46 ∗ C o n s t r u t o r
47 ∗48 ∗ @access p u b l i c
49 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
50 ∗ @param s t r i n g E n d e r e o (HOST) do HSM
51 ∗ @param s t r i n g I d e n t i f i c a d o ( ID ) do HSM
52 ∗ @return v o i d
53 ∗ @throws E x c e p t i o n Quando $ e n g i n e P a t h n o v a l i d o
54 ∗ @throws E x c e p t i o n Quando $ e n g i n e I d n o v a l i d o
55 ∗ /
56 p u b l i c f u n c t i o n c o n s t r u c t ( $ e n g i n e P a t h , $ e n g i n e I d )
57 {58 i f ( $ e n g i n e I d != n u l l && $ e n g i n e I d != "" ) {59 i f ( $ e n g i n e P a t h != n u l l && $ e n g i n e P a t h != "" ) {60 $ t h i s−>eng ine ID = $ e n g i n e I d ;
61 $ t h i s−>e n g i n e P a t h = $ e n g i n e P a t h ;
62 } e l s e {63 th row new E x c e p t i o n ( ’O valor de enginePath n o
valido.’ ) ;
64 }65 } e l s e {66 th row new E x c e p t i o n ( ’O valor de engineId n o valido.’ )
;
67 }68 }69
70 /∗ ∗71 ∗ S e t a o ID do HSM.
72 ∗73 ∗ @access p u b l i c
74 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
75 ∗ @param s t r i n g o ID do HSM
76 ∗ @return v o i d
77 ∗ @throws E x c e p t i o n Quando o v a l o r passado como p a r m e t r o n o
v a l i d o
78 ∗ /
79 p u b l i c f u n c t i o n s e t I d ( $ i d )
304
80 {81 i f ( $ i d != n u l l && $ i d != "" ) {82 $ t h i s−>eng ine ID = $ i d ;
83 } e l s e {84 th row new E x c e p t i o n ( ’O valor de Id n o valido.’ ) ;
85 }86 }87
88 /∗ ∗89 ∗ Re torna o ID do HSM.
90 ∗91 ∗ @access p u b l i c
92 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
93 ∗ @return s t r i n g O ID do HSM em forma de uma s t r i n g .
94 ∗ Se o ID n o e s t i v e r se tado ,
d i s p a r a e x c e o
95 ∗96 ∗ /
97 p u b l i c f u n c t i o n g e t I d ( )
98 {99 r e t u r n ( s t r i n g ) $ t h i s−>eng ine ID ;
100 }101
102 /∗ ∗103 ∗ R e a l i z a um t e s t e de c o n e x o , para v e r i f i c a r se o HSM e s t
respondendo .
104 ∗105 ∗ @access p u b l i c
106 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
107 ∗ @return boo lean TRUE se o HSM e s t i v e r OK.
108 ∗ FALSE se houver algum problema
c o n e c t a n d o com o HSM
109 ∗ /
110 p u b l i c f u n c t i o n t e s t I n i t ( )
111 {112 $ r e t = l i b c r y p t o s e c e n g i n e t e s t i n i t ( $ t h i s−>e n g i n e P a t h ,
113 $ t h i s
−>
engineID
,
114 $ t h i s
−>
305
commands
)
;
115
116 r e t u r n $ r e t ;
117 }118
119 /∗ ∗120 ∗ Re torna a l i s t a de comandos d e f i n i d o s para o HSM.
121 ∗122 ∗ @access p u b l i c
123 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
124 ∗ @return a r r a y Array c o n t e n d o os comandos d i s p o n v e i s do HSM
125 ∗ /
126 p u b l i c f u n c t i o n getCommands ( )
127 {128 r e t u r n $ t h i s−>commands ;
129 }130
131 /∗ ∗132 ∗ A d i c i o n a um comando na l i s t a de comandos . Um comando t r a t a d o
133 ∗ como um par ( chave , v a l o r )<br>
134 ∗ Se o comando j e x i s t i r , o v a l o r do comando s u b t i t u d o . <br>
135 ∗ S e n o o comando a d i c i o n a d o ao f i n a l da l i s t a de comandos . <br>
136 ∗137 ∗138 ∗ @access p u b l i c
139 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
140 ∗ @param s t r i n g A ” chave ” do comando
141 ∗ @param s t r i n g O ” v a l o r ” da chave do comando . E s t e p a r m e t r o
o p c i o n a l .
142 ∗ @return v o i d
143 ∗ @throws E x c e p t i o n Quando o v a l o r passado como p a r m e t r o n o
v a l i d o
144 ∗ /
145 p u b l i c f u n c t i o n addCommand ( $key , $ v a l u e = n u l l )
146 {147 i f ( $key != n u l l && $key != "" ) {148 $ t h i s−>commands [ $key ] = $ v a l u e ;
149 } e l s e {150 th row new E x c e p t i o n ( ’O valor de Id n o valido.’ ) ;
151 }
306
152 }153
154 /∗ ∗155 ∗ Re torna a e n d e r e o do HSM.
156 ∗157 ∗ @access p u b l i c
158 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
159 ∗ @return a r r a y Array c o n t e n d o os comandos d i s p o n v e i s do HSM
160 ∗ /
161 p u b l i c f u n c t i o n g e t E n g i n e P a t h ( )
162 {163 r e t u r n ( s t r i n g ) $ t h i s−>e n g i n e P a t h ;
164 }165
166 } /∗ f i m da c l a s s e OpenHSMdEngine ∗ /
167
168 ?>
1 <?php
2 / / TODO FAZER DOCUMENTA O
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − c l a s s . C o n v e r t e r s . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 8 : 4 5
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 r e q u i r e o n c e ( ’LabsecCL/Security/Certification/Extension/KeyUsageExtensionCL
.php’ ) ;
23 r e q u i r e o n c e ( ’LabsecCL/Security/Certification/Extension/
BasicConstraintsExtensionCL.php’ ) ;
307
24 r e q u i r e o n c e ( ’LabsecCL/Security/Certification/Extension/
SubjectKeyIdentifierExtensionCL.php’ ) ;
25 r e q u i r e o n c e ( ’LabsecCL/Security/Certification/Extension/
AuthorityKeyIdentifierExtensionCL.php’ ) ;
26 r e q u i r e o n c e ( ’LabsecCL/Security/Certification/Extension/
ExtendedKeyUsageExtensionCL.php’ ) ;
27 r e q u i r e o n c e ( ’LabsecCL/Security/Certification/Extension/
SubjectAlternativeNameExtensionCL.php’ ) ;
28 r e q u i r e o n c e ( ’LabsecCL/Security/Certification/Extension/
CertificatePoliciesExtensionCL.php’ ) ;
29 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/Policy/CPSUri.php’ ) ;
30 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/Policy/UserNotice.php
’ ) ;
31
32 /∗ ∗33 ∗ C l a s s e u t i l i t r i a com c o n v e r s o r e s . Os p a r m e t r o s p a s sa d o s
34 ∗ para e s t a c l a s s e DEVEM e s t a r em f o r m a t o PEM.
35 ∗36 ∗ @access p u b l i c
37 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
38 ∗ /
39 c l a s s L a b s e c C L S e c u r i t y U t i l P a r s e r s
40 {41
42 /∗ ∗43 ∗ Trans forma um Array em um RDNSequence
44 ∗45 ∗ @access p r i v a t e
46 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
47 ∗ @param a r r a y Array com os campos a t r a n s f o r m a r em RDNSequence .
48 ∗ @return RDNSequence o RDNSequence c r i a d o a p a r t i r do a r r a y .
49 ∗ /
50 p u b l i c s t a t i c f u n c t i o n t ransformArrayToRDNSequence (& $ a r r a y )
51 {52 / / i n s t a n c i a um RDNSequence
53 $rdn = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e ( ) ;
54
55 / / a d i c i o n a cada e n t r a d a num o b j e t o RDNSequence
56 foreach ( $ a r r a y as $key => $ c o u n t e r ) {57 foreach ( $ c o u n t e r a s $ v a l u e ) {58 $rdn−>ad d E n t r y ( $key , $ v a l u e ) ;
59 }
308
60 }61
62 r e t u r n $rdn ;
63 }64
65 p u b l i c s t a t i c f u n c t i o n c o n v e r t C e r t i f i c a t e E x t e n s i o n s (& $ d a t a )
66 {67 $ e x t e n s i o n s = array ( ) ;
68
69 $keyUsage = L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
c o n v e r t K e y U s a g e E x t e n s i o n ( $ d a t a ) ;
70
71 i f ( $keyUsage != n u l l ) {72 $ e x t e n s i o n s [ $keyUsage−>ge tO id ( ) ] = $keyUsage ;
73 }74
75 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
76 $ b a s i c C o n s t r a i n t s = L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
c o n v e r t B a s i c C o n s t r a i n t s E x t e n s i o n ( $ d a t a ) ;
77
78 i f ( $ b a s i c C o n s t r a i n t s != n u l l ) {79 $ e x t e n s i o n s [ $ b a s i c C o n s t r a i n t s −>ge tO id ( ) ] =
$ b a s i c C o n s t r a i n t s ;
80 }81 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
82
83 $ s u b j e c t K e y I d e n t i f i e r = L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
c o n v e r t S u b j e c t K e y I d e n t i f i e r E x t e n s i o n ( $ d a t a ) ;
84
85 i f ( $ s u b j e c t K e y I d e n t i f i e r != n u l l ) {86 $ e x t e n s i o n s [ $ s u b j e c t K e y I d e n t i f i e r −>ge t O i d ( ) ] =
$ s u b j e c t K e y I d e n t i f i e r ;
87 }88 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
89
90 $ a u t h o r i t y K e y I d e n t i f i e r = L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
c o n v e r t A u t h o r i t y K e y I d e n t i f i e r E x t e n s i o n ( $ d a t a ) ;
309
91
92 i f ( $ a u t h o r i t y K e y I d e n t i f i e r != n u l l ) {93 $ e x t e n s i o n s [ $ a u t h o r i t y K e y I d e n t i f i e r −>ge t O i d ( ) ] =
$ a u t h o r i t y K e y I d e n t i f i e r ;
94 }95 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
96
97 $extendedKeyUsage = L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
c o n v e r t E x t e n d e d K e y U s a g e E x t e n s i o n ( $ d a t a ) ;
98
99 i f ( $extendedKeyUsage != n u l l ) {100 $ e x t e n s i o n s [ $extendedKeyUsage−>ge tO id ( ) ] =
$extendedKeyUsage ;
101 }102 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
103
104 $s u b j ec tA l tName = L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
c o n v e r t S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n ( $ d a t a ) ;
105
106 i f ( $ sub j ec tA l tName != n u l l ) {107 $ e x t e n s i o n s [ $sub jec tAl tName−>ge tO id ( ) ] =
$sub j ec tA l tName ;
108 }109 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
110
111 $ p o l i c i e s = L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
c o n v e r t P o l i c i e s E x t e n s i o n ( $ d a t a ) ;
112
113 i f ( $ p o l i c i e s != n u l l ) {114 / / TODO v e r i f i c a r se pode s e r o OID n e s s e caso
115 $ e x t e n s i o n s [ $ p o l i c i e s −>ge tO id ( ) ] = $ p o l i c i e s ;
116 }117 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
118
119 / / p r i n t r ( $ e x t e n s i o n s ) ;
310
120
121 r e t u r n $ e x t e n s i o n s ;
122
123 }124
125 p u b l i c s t a t i c f u n c t i o n c o n v e r t C R L E x t e n s i o n s (& $ d a t a )
126 {127 / / TODO FAZER
128 }129
130 p u b l i c s t a t i c f u n c t i o n c o n v e r t C e r t i f i c a t e E x t e n s i o n s T o A r r a y (&
$ e x t e n s i o n s )
131 {132 / / TODO FAZER
133 r e t u r n array ( ) ;
134 }135
136 p u b l i c s t a t i c f u n c t i o n conve r tCRLExtens ionsToAr ray (& $ e x t e n s i o n s )
137 {138 / / TODO FAZER
139 }140
141 p r i v a t e f u n c t i o n c o n v e r t K e y U s a g e E x t e n s i o n (& $ d a t a )
142 {143 $keyUsage =
l i b c r y p t o s e c c e r t i f i c a t e e x t e n s i o n g e t k e y u s a g e ( $ d a t a ) ;
144
145 i f ( $keyUsage != n u l l ) {146 $keyUsageEx tens ion = new
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
( ) ;
147
148 / / pega o c r i t i c a l do m d u l o e s e t a na e x t e n s o
149 i f ( $keyUsage [ $keyUsageExtens ion−>ge tO id ( ) ] [ ’
critical’ ] ) {150 $keyUsageExtens ion−> s e t C r i t i c a l ( t rue ) ;
151 }152
153 / / pega o v a l u e do m d u l o
154 $ v a l u e = $keyUsage [ $keyUsageExtens ion−>ge tO i d ( ) ] [ ’
value’ ] ;
155
156 / / a p l i c a as m s c a r a s
311
157 $usage = array ( ) ;
158 $usage [ ’digitalSignature’ ] = ( $ v a l u e & 2) ? TRUE :
FALSE ;
159 $usage [ ’nonRepudiation’ ] = ( $ v a l u e & 4) ? TRUE :
FALSE ;
160 $usage [ ’keyEncipherment’ ] = ( $ v a l u e & 8) ? TRUE :
FALSE ;
161 $usage [ ’dataEncipherment’ ] = ( $ v a l u e & 16) ? TRUE :
FALSE ;
162 $usage [ ’keyAgreement’ ] = ( $ v a l u e & 32) ? TRUE :FALSE;
163 $usage [ ’keyCertSign’ ] = ( $ v a l u e & 64) ? TRUE :FALSE ;
164 $usage [ ’cRLSign’ ] = ( $ v a l u e & 128) ? TRUE :FALSE ;
165 $usage [ ’encipherOnly’ ] = ( $ v a l u e & 256) ? TRUE :
FALSE ;
166 $usage [ ’decipherOnly’ ] = ( $ v a l u e & 512) ? TRUE :
FALSE ;
167
168 $keyUsageExtens ion−>addUsage (
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
: : DIGITAL SIGNATURE , $usage [ ’digitalSignature’ ]
) ;
169 $keyUsageExtens ion−>addUsage (
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
: : NON REPUDIATION , $usage [ ’nonRepudiation’ ] ) ;
170 $keyUsageExtens ion−>addUsage (
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
: : KEY ENCIPHERMENT, $usage [ ’keyEncipherment’ ] ) ;
171 $keyUsageExtens ion−>addUsage (
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
: : DATA ENCIPHERMENT, $usage [ ’dataEncipherment’ ]
) ;
172 $keyUsageExtens ion−>addUsage (
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
: : KEY AGREEMENT, $usage [ ’keyAgreement’ ] ) ;
173 $keyUsageExtens ion−>addUsage (
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
: : KEY CERT SIGN , $usage [ ’keyCertSign’ ] ) ;
174 $keyUsageExtens ion−>addUsage (
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
: : CRL SIGN , $usage [ ’cRLSign’ ] ) ;
175 $keyUsageExtens ion−>addUsage (
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
312
: : ENCIPHER ONLY , $usage [ ’encipherOnly’ ] ) ;
176 $keyUsageExtens ion−>addUsage (
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
: : DECIPHER ONLY , $usage [ ’decipherOnly’ ] ) ;
177
178 $ r e s u l t = $keyUsageEx tens ion ;
179
180 } e l s e {181 $ r e s u l t = n u l l ;
182 }183
184 r e t u r n $ r e s u l t ;
185 }186
187 p r i v a t e f u n c t i o n c o n v e r t B a s i c C o n s t r a i n t s E x t e n s i o n (& $ d a t a )
188 {189 / / pega o v a l o r do m d u l o
190 $ i sCa =
l i b c r y p t o s e c c e r t i f i c a t e e x t e n s i o n g e t b a s i c c o n s t r a i n t s
( $ d a t a ) ;
191
192 / / s e e x i s t i r a e x t e n s o
193 i f ( $ i sCa != n u l l ) {194 $ b a s i c C o n s t r a i n t s = new
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n B a s i c C o n s t r a i n t s E x t e n s i o n C L
( ) ;
195
196 / / v e r i f i c a se c r i t i c a l
197 i f ( $ i sCa [ $ b a s i c C o n s t r a i n t s −>ge tO id ( ) ] [ ’critical’ ] )
{198 $ b a s i c C o n s t r a i n t s −> s e t C r i t i c a l ( t rue ) ;
199 }200
201 / / s e t a o v a l o r de CA
202 $ b a s i c C o n s t r a i n t s −>s e t C a ( ( boo l ) $ i sCa [
$ b a s i c C o n s t r a i n t s −>ge tO i d ( ) ] [ ’value’ ] [ ’ca’ ] ) ;
203
204 / / pega o v a l o r do p a t h L e n g t h
205 $ p a t h L e n g t h = $ i sCa [ $ b a s i c C o n s t r a i n t s −>ge tO i d ( ) ] [ ’
value’ ] [ ’pathLen’ ] ;
206 / / s e o v a l o r f o r d i f e r e n t e de NULL , s e t a o v a l o r de
Pa thLeng th
207 i f ( $ p a t h L e n g t h != n u l l ) {
313
208 $ b a s i c C o n s t r a i n t s −>s e t P a t h L e n g t h (
$ p a t h L e n g t h ) ;
209 }210
211 $ r e s u l t = $ b a s i c C o n s t r a i n t s ;
212
213 } e l s e {214 $ r e s u l t = n u l l ;
215 }216
217 r e t u r n $ r e s u l t ;
218 }219
220 p r i v a t e f u n c t i o n c o n v e r t S u b j e c t K e y I d e n t i f i e r E x t e n s i o n (& $ d a t a )
221 {222 / / pega o v a l o r no m d u l o
223 $ s u b j e c t K e y I d =
l i b c r y p t o s e c c e r t i f i c a t e e x t e n s i o n g e t s u b j e c t k e y i d e n t i f i e r
( $ d a t a ) ;
224
225 / / Se a e x t e n s o e x i s t i r
226 i f ( $ s u b j e c t K e y I d != n u l l ) {227 / / c r i a o o b j e t o , e s e t a o a t r i b u t o
228 $ s u b j e c t K e y I d E x t e n s i o n = new
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n S u b j e c t K e y I d e n t i f i e r E x t e n s i o n C L
( ) ;
229 $ s u b j e c t K e y I d E x t e n s i o n−>s e t K e y I d e n t i f i e r (
$ s u b j e c t K e y I d [ $ s u b j e c t K e y I d E x t e n s i o n−>ge tO id ( ) ] [
’value’ ] [ ’keyIdentifier’ ] ) ;
230
231 / / v e r i f i c a se c r i t i c a l
232 i f ( $ s u b j e c t K e y I d [ $ s u b j e c t K e y I d E x t e n s i o n−>ge t O i d ( )
] [ ’critical’ ] ) {233 $ s u b j e c t K e y I d E x t e n s i o n−> s e t C r i t i c a l ( t rue ) ;
234 }235
236 $ r e s u l t = $ s u b j e c t K e y I d E x t e n s i o n ;
237
238 } e l s e {239 $ r e s u l t = n u l l ;
240 }241
242 r e t u r n $ r e s u l t ;
314
243 }244
245 p r i v a t e f u n c t i o n c o n v e r t A u t h o r i t y K e y I d e n t i f i e r E x t e n s i o n (& $ d a t a )
246 {247 / / TODO v e r como f a z e r , para n o a d i c i o n a r , caso s e j a n u l l
os 3 campos
248
249 / / a d i c i o n a o K e y I d e n t i f i e r , s e e x i s t i r
250 $ e x t e n s i o n =
l i b c r y p t o s e c c e r t i f i c a t e e x t e n s i o n g e t a u t h o r i t y k e y i d e n t i f i e r
( $ d a t a ) ;
251
252 i f ( $ e x t e n s i o n != n u l l ) {253 / / c r i a um o b j e t o
254 $ a u t h o r i t y K e y I d E x t e n s i o n = new
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n A u t h o r i t y K e y I d e n t i f i e r E x t e n s i o n C L
( ) ;
255
256
257 / / v e r i f i c a se c r i t i c a l
258 i f ( $ e x t e n s i o n [ $ a u t h o r i t y K e y I d E x t e n s i o n−>ge tO id ( ) ] [
’critical’ ] ) {259 $ a u t h o r i t y K e y I d E x t e n s i o n−> s e t C r i t i c a l ( t rue )
;
260 }261
262 / / pega o campo K e y I d e n t i f i e r
263 $keyID = $ e x t e n s i o n [ $ a u t h o r i t y K e y I d E x t e n s i o n−>
ge t O i d ( ) ] [ ’value’ ] [ ’keyIdentifier’ ] ;
264 i f ( $keyID != NULL) {265 $ a u t h o r i t y K e y I d E x t e n s i o n−>s e t K e y I d e n t i f i e r (
$keyID ) ;
266 }267
268 / / pega o campo c e r t I s s u e r
269 $ a u t h o r i t y C e r t I s s u e r = $ e x t e n s i o n [
$ a u t h o r i t y K e y I d E x t e n s i o n−>ge tO id ( ) ] [ ’value’ ] [ ’
certIssuer’ ] ;
270 i f ( $ a u t h o r i t y C e r t I s s u e r != n u l l ) {271 / / $generalNames = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e s
( ) ;
315
272 / / TODO como s a b e r qua l o t i p o de g e n e r a l
name?
273 / / $ a u t h o r i t y K e y I d E x t e n s i o n−>
s e t A u t h o r i t y C e r t I s s u e r ( ) ;
274 }275 / / pega o campo s e r i a l N u m b e r
276 $ a u t h o r i t y C e r t S e r i a l N u m b e r = $ e x t e n s i o n [
$ a u t h o r i t y K e y I d E x t e n s i o n−>ge tO id ( ) ] [ ’value’ ] [ ’
certSerialNumber’ ] ;
277 i f ( $ a u t h o r i t y C e r t S e r i a l N u m b e r != n u l l ) {278 $ a u t h o r i t y K e y I d E x t e n s i o n−>
s e t A u t h o r i t y C e r t S e r i a l N u m b e r (
$ a u t h o r i t y C e r t S e r i a l N u m b e r ) ;
279 }280
281 $ r e s u l t = $ a u t h o r i t y K e y I d E x t e n s i o n ;
282
283 } e l s e {284 $ r e s u l t = n u l l ;
285 }286
287 r e t u r n $ r e s u l t ;
288 }289
290 p r i v a t e f u n c t i o n c o n v e r t E x t e n d e d K e y U s a g e E x t e n s i o n (& $ d a t a )
291 {292 $extendedKeyUsage =
l i b c r y p t o s e c c e r t i f i c a t e e x t e n s i o n g e t e x t e n d e d k e y u s a g e
( $ d a t a ) ;
293
294 i f ( $extendedKeyUsage != n u l l ) {295 $ex tendedKeyUsageEx tens ion = new
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n E x t e n d e d K e y U s a g e E x t e n s i o n C L
( ) ;
296
297 / / v e r i f i c a se c r i t i c a l
298 i f ( $extendedKeyUsage [ $ex tendedKeyUsageExtens ion−>
ge t O i d ( ) ] [ ’critical’ ] ) {299 $aex tendedKeyUsageEx tens ion−> s e t C r i t i c a l (
t rue ) ;
300 }301
316
302 / / p e r c o r r e o a r r a y r e t o r n a d o , e v a i a d i c i o n a n d o os
OIDs
303 foreach ( $extendedKeyUsage [
$ex tendedKeyUsageExtens ion−>ge tO id ( ) ] [ ’value’ ]
a s $ v a l u e ) {304 $o id = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r
( ) ;
305 $oid−>setOID ( $ v a l u e ) ;
306 $ex tendedKeyUsageExtens ion−>addUsage ( $o id ) ;
307 }308
309 $ r e s u l t = $ex t endedKeyUsageEx tens ion ;
310
311 } e l s e {312 $ r e s u l t = n u l l ;
313 }314
315 r e t u r n $ r e s u l t ;
316 }317
318 p r i v a t e f u n c t i o n c o n v e r t S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n (& $ d a t a )
319 {320 $ a l t e r n a t i v e N a m e =
l i b c r y p t o s e c c e r t i f i c a t e e x t e n s i o n g e t s u b j e c t a l t e r n a t i v e n a m e
( $ d a t a ) ;
321
322 i f ( $ a l t e r n a t i v e N a m e != n u l l ) {323 $ a l t e r n a t i v e N a m e = new
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n C L
( ) ;
324
325 / / $ a l t e r n a t i v e N a m e−>s e t S u b j e c t A l t e r n a t i v e N a m e ( ) ;
326 / / TODO como s a b e r qua l o t i p o de g e n e r a l name?
327 }328 }329
330 p r i v a t e f u n c t i o n c o n v e r t I s s u e r A l t e r n a t i v e N a m e E x t e n s i o n (& $ d a t a )
331 {332 $ a l t e r n a t i v e N a m e =
l i b c r y p t o s e c c e r t i f i c a t e e x t e n s i o n g e t i s s u e r a l t e r n a t i v e n a m e
( $ d a t a ) ;
333
317
334 i f ( $ a l t e r n a t i v e N a m e != n u l l ) {335 $ a l t e r n a t i v e N a m e = new
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n I s s u e r A l t e r n a t i v e N a m e E x t e n s i o n C L
( ) ;
336
337 / / $ a l t e r n a t i v e N a m e−>s e t S u b j e c t A l t e r n a t i v e N a m e ( ) ;
338 / / TODO como s a b e r qua l o t i p o de g e n e r a l name?
339 }340 }341
342 p r i v a t e f u n c t i o n c o n v e r t P o l i c i e s E x t e n s i o n (& $ d a t a )
343 {344 $ v a l u e =
l i b c r y p t o s e c c e r t i f i c a t e e x t e n s i o n g e t c e r t i f i c a t e p o l i c i e s
( $ d a t a ) ;
345
346 i f ( $ v a l u e != n u l l ) {347
348 $ p o l i c i e s = new
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C e r t i f i c a t e P o l i c i e s E x t e n s i o n C L
( ) ;
349
350 / / v e r i f i c a se c r i t i c a l
351 i f ( $ v a l u e [ $ p o l i c i e s −>ge t O i d ( ) ] [ ’critical’ ] ) {352 $ p o l i c i e s −> s e t C r i t i c a l ( t rue ) ;
353 }354
355 / / i n s t a n c i a os o b j e t o s
356 $ p o l i c y I n f o r m a t i o n = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y P o l i c y I n f o r m a t i o n
( ) ;
357
358 foreach ( $ v a l u e [ $ p o l i c i e s −>ge t O i d ( ) ] [ ’value’ ] a s
$ p o l i c y ) {359
360 / / pega os dados do c e r t i f i c a d o
361 $o id = $ p o l i c y [ ’oid_pc’ ] ;
362
363 / / s e t a o OID da PC , se houver
364 i f ( $o id != n u l l ) {365 $ o i d O b j e c t = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r
( ) ;
318
366 $ o i d O b j e c t−>setOID ( $o id ) ;
367
368 $ p o l i c y I n f o r m a t i o n−>
s e t P o l i c y I d e n t i f i e r ( $ o i d O b j e c t ) ;
369 }370
371 f o r ( $ i = 0 ; $ i < s i z e o f ( $ p o l i c y ) − 1 ; $ i
++){372
373 $ p o l i c y Q u a l i f i e r = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y P o l i c y Q u a l i f i e r I n f o
( ) ;
374
375 $ c p s U r i = @$policy [ $ i ] [ ’url_dpc’ ] ;
376 $ n o t i c e = @$policy [ $ i ] [ ’user_notice
’ ] ;
377
378 i f ( $ c p s U r i != n u l l ) {379 / / s e houver u r l , a d i c i o n a
u r l
380 $ u r i = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y C P S U r i
( $ c p s U r i ) ;
381 $ p o l i c y Q u a l i f i e r −>
a d d Q u a l i f i e r ( $ u r i ) ;
382 }383
384 i f ( $ n o t i c e != n u l l ) {385 / / s e houver n o t i c e , add
u s e r n o t i c e
386 $ u s e r N o t i c e = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y U s e r N o t i c e
( $ n o t i c e ) ;
387 $ p o l i c y Q u a l i f i e r −>
a d d Q u a l i f i e r ( $ u s e r N o t i c e
) ;
388 }389
390 / / a d i c i o n a os o b j e t o s que e x i s t i r e m
( u s e r N o t i c e / Uri )
391 $ p o l i c y I n f o r m a t i o n−>
a d d P o l i c y Q u a l i f i e r I n f o (
$ p o l i c y Q u a l i f i e r ) ;
319
392
393 }394
395 / / a d i c i o n a na E x t e n s o p o l i c y E x t e n s i o n
396 $ p o l i c i e s −>a d d P o l i c y I n f o r m a t i o n (
$ p o l i c y I n f o r m a t i o n ) ;
397
398 }399
400 $ r e s u l t a d o = $ p o l i c i e s ;
401
402 } e l s e {403 $ r e s u l t a d o = n u l l ;
404 }405
406 r e t u r n $ r e s u l t a d o ;
407 }408
409 }410
411 ?>
1 <?php
2 / / TODO t e r m i n a r d o c u m e n t a o
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − c l a s s . C e r t i f i c a t e R e v o c a t i o n L i s t B u i l d e r C L . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 2 1 : 4 8
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗
320
22 ∗ i n c l u d e C e r t i f i c a t e R e v o c a t i o n L i s t B u i l d e r
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/
CertificateRevocationListBuilderInterface.php’ ) ;
27
28
29 /∗ ∗30 ∗ S h o r t d e s c r i p t i o n o f c l a s s C e r t i f i c a t e R e v o c a t i o n L i s t B u i l d e r C L
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ /
35 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e R e v o c a t i o n L i s t B u i l d e r C L
36 imp lemen t s L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e R e v o c a t i o n L i s t B u i l d e r
37 {38 p r i v a t e $ i s s u e r ;
39
40 p r i v a t e $ t h i s U p d a t e ;
41
42 p r i v a t e $nex tUpda t e ;
43
44 p r i v a t e $ s e r i a l ;
45
46 p r i v a t e $ c r l E n t r i e s ;
47
48 p r i v a t e $ e x t e n s i o n s ;
49
50 /∗ ∗51 ∗ C o n s t r u t o r
52 ∗53 ∗ @access p u b l i c
54 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
55 ∗ @return v o i d
56 ∗ /
57 p u b l i c f u n c t i o n c o n s t r u c t ( )
58 {59 }60
61 /∗ ∗62 ∗ S h o r t d e s c r i p t i o n o f method s e t I s s u e r
63 ∗
321
64 ∗ @access p u b l i c
65 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
66 ∗ @param RDNSequence
67 ∗ @return v o i d
68 ∗ /
69 p u b l i c f u n c t i o n s e t I s s u e r (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e $ i s s u e r )
70 {71 $ t h i s−> i s s u e r = $ i s s u e r ;
72 }73
74 /∗ ∗75 ∗ S h o r t d e s c r i p t i o n o f method s e t T h i s U p d a t e
76 ∗77 ∗ @access p u b l i c
78 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
79 ∗ @param Zend Date
80 ∗ @return v o i d
81 ∗ /
82 p u b l i c f u n c t i o n s e t T h i s U p d a t e ( Zend Date $ d a t e )
83 {84 $ t h i s−>t h i s U p d a t e = $ d a t e ;
85 }86
87 /∗ ∗88 ∗ S h o r t d e s c r i p t i o n o f method s e t N e x t U p d a t e
89 ∗90 ∗ @access p u b l i c
91 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
92 ∗ @param Zend Date
93 ∗ @return v o i d
94 ∗ /
95 p u b l i c f u n c t i o n s e t N e x t U p d a t e ( Zend Date $ d a t e )
96 {97 $ t h i s−>n e x t U p d a t e = $ d a t e ;
98 }99
100 /∗ ∗101 ∗ S h o r t d e s c r i p t i o n o f method s e t S e r i a l
102 ∗103 ∗ @access p u b l i c
104 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
105 ∗ @param s t r i n g
322
106 ∗ @return v o i d
107 ∗ /
108 p u b l i c f u n c t i o n s e t S e r i a l ( $ s e r i a l )
109 {110 $ t h i s−> s e r i a l = $ s e r i a l ;
111 }112
113 /∗ ∗114 ∗ S h o r t d e s c r i p t i o n o f method addCRLEntry
115 ∗116 ∗ @access p u b l i c
117 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
118 ∗ @param CRLEntry
119 ∗ @return v o i d
120 ∗ /
121 p u b l i c f u n c t i o n addCRLEntry ( CRLEntry $ c r l E n t r y )
122 {123 $ t h i s−>c r l E n t r i e s [ ] = $ c r l E n t r y ;
124 }125
126 /∗ ∗127 ∗ S h o r t d e s c r i p t i o n o f method a d d E x t e n s i o n
128 ∗129 ∗ @access p u b l i c
130 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
131 ∗ @param E x t e n s i o n
132 ∗ @return v o i d
133 ∗ /
134 p u b l i c f u n c t i o n a d d E x t e n s i o n ( E x t e n s i o n $ e x t e n s i o n )
135 {136 $ t h i s−>e x t e n s i o n s [ ] = $ e x t e n s i o n ;
137 }138
139 /∗ ∗140 ∗ S h o r t d e s c r i p t i o n o f method a d d E x t e n s i o n s
141 ∗142 ∗ @access p u b l i c
143 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
144 ∗ @param a r r a y
145 ∗ @return v o i d
146 ∗ /
147 p u b l i c f u n c t i o n a d d E x t e n s i o n s ( $ e x t e n s i o n s )
148 {
323
149 i f ( i s a r r a y ( $ e x t e n s i o n s ) ) {150 foreach ( $ e x t e n s i o n s as $ e x t e n s a o ) {151 i f ( $ e x t e n s a o i n s t a n c e o f
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n )
{152 $ t h i s−>e x t e n s i o n s = $ e x t e n s a o ;
153 } e l s e {154 th row new E x c e p t i o n ( ’O p a r m e t r o
$extensions DEVE ser um array
155 com elementos somento do
tipo Extension’ ) ;
156 }157 }158 } e l s e {159 th row new E x c e p t i o n ( ’O p a r m e t r o $extensions DEVE
ser array.’ ) ;
160 }161 }162
163 /∗ ∗164 ∗ S h o r t d e s c r i p t i o n o f method s i g n
165 ∗166 ∗ @access p u b l i c
167 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
168 ∗ @param s t r i n g
169 ∗ @param s t r i n g
170 ∗ @return C e r t i f i c a t e R e v o c a t i o n L i s t
171 ∗ /
172 p u b l i c f u n c t i o n s i g n ( $hashAlgor i thm , $privKey , $password = n u l l ,
$ e x t r a A r g s = n u l l )
173 {174 / / TODO FAZER
175 $ r e t u r n V a l u e = n u l l ;
176
177 l i b c r y p t o s e c i s s u e c r l (
178 $ t h i s−>s e r i a l ,
179 $ t h i s−>i s s u e r−>g e t E n t r i e s ( ) ,
180 $ t h i s−>t h i s U p d a t e ,
181 $ t h i s−>nex tUpda te ,
182 $ t h i s−>c r l E n t r i e s , / / TODO VERIFICAR SE ASSIM
FUNCIONA
183 $privKey ,
184 $password ,
324
185 L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
conve r tCRLExtens ionsToAr ray ( $ t h i s−>e x t e n s i o n s )
186 ) ;
187
188 r e t u r n $ r e t u r n V a l u e ;
189 }190
191 } /∗ end o f c l a s s C e r t i f i c a t e R e v o c a t i o n L i s t B u i l d e r C L ∗ /
192
193 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − c l a s s . C R L D i s t r i b u t i o n P o i n t E x t e n s i o n C L . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 2 7 : 2 7
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u d e C R L D i s t r i b u t i o n P o i n t E x t e n s i o n
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’
Labsec_Security_Certificate_Extension_CRLDistributionPointExtension.php’
) ;
27
28
29 /∗ ∗30 ∗ S h o r t d e s c r i p t i o n o f c l a s s C R L D i s t r i b u t i o n P o i n t E x t e n s i o n C L
325
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ /
35 c l a s s
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C R L D i s t r i b u t i o n P o i n t E x t e n s i o n C L
36 imp lemen t s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C R L D i s t r i b u t i o n P o i n t E x t e n s i o n
37 {38 p r i v a t e $ d i s t r i b u t i o n P o i n t s = array ( ) ;
39
40 /∗ ∗41 ∗ C o n s t r u t o r .<br>
42 ∗43 ∗ /
44 p u b l i c f u n c t i o n c o n s t r u c t ( ) {45
46 $ o i d F a c t o r y = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
47
48 / / pega OID usando f a c t o r y
49 $ t h i s−>ex tn ID = $ o i d F a c t o r y−>g e t O b j e c t I d e n t i f i e r B y C o d e (
50 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y : :
EXTENSION CRL DISTRIBUTION POINTS ) ;
51
52 / / segundo a RFC , e s t a e x t e n s o pode ou n o s e r c r i t i c a l
53 }54
55 /∗ ∗56 ∗ S h o r t d e s c r i p t i o n o f method a d d D i s t r i b u i t o n P o i n t
57 ∗58 ∗ @access p u b l i c
59 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
60 ∗ @param s t r i n g
61 ∗ @param s t r i n g
62 ∗ @param RDNSequence
63 ∗ @return v o i d
64 ∗ /
65 p u b l i c f u n c t i o n a d d D i s t r i b u i t o n P o i n t (
L a b s e c S e c u r i t y C e r t i f i c a t e C R L D i s t r i b u t i o n P o i n t $ d i s t r i b u t i o n P o i n t
)
66 {
326
67 $ t h i s−>d i s t r i b u t i o n P o i n t s [ ] = $ d i s t r i b u t i o n P o i n t ;
68 }69
70 /∗ ∗71 ∗ S h o r t d e s c r i p t i o n o f method g e t D i s t r i b u i t i o n P o i n t
72 ∗73 ∗ @access p u b l i c
74 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
75 ∗ @return v o i d
76 ∗ /
77 p u b l i c f u n c t i o n g e t D i s t r i b u i t i o n P o i n t ( )
78 {79 r e t u r n $ t h i s−>d i s t r i b u t i o n P o i n t s ;
80 }81
82 /∗ ∗83 ∗ Re torna o v a l o r da e x t e n s o
84 ∗85 ∗ @access p u b l i c
86 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
87 ∗ @return s t r i n g o v a l o r
88 ∗ /
89 p u b l i c f u n c t i o n g e t V a l u e ( )
90 {91 }92
93 /∗ ∗94 ∗ Re torna o v a l o r da e x t e n s o em base 64
95 ∗96 ∗ @access p u b l i c
97 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
98 ∗ @return s t r i n g o v a l o r
99 ∗ /
100 p u b l i c f u n c t i o n ge tBase64Va lue ( )
101 {102 }103
104 } /∗ end o f c l a s s C R L D i s t r i b u t i o n P o i n t E x t e n s i o n C L ∗ /
105
106 ?>
1 <?php
2
327
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − c l a s s . S u b j e c t K e y I d e n t i f i e r E x t e n s i o n C L . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 3 1 : 4 7
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i S u b j e c t K e y I d e n t i f i e r E x t e n s i o n I n t e r f a c e
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/
SubjectKeyIdentifierExtensionInterface.php’ ) ;
27 r e q u i r e o n c e ( ’Labsec/Security/Certification/ObjectIdentifierFactory.php’ ) ;
28 r e q u i r e o n c e ( ’Zend/Validate.php’ ) ;
29
30 /∗ ∗31 ∗ C l a s s e r e s p o n s v e l por i m p l e m e n t a r a i n t e r f a c e
32 ∗ S u b j e c t K e y I d e n t i f i e r E x t e n s i o n I n t e r f a c e , que por sua v e z
33 ∗ r e s p o n s v e l p e l a e x t e n s o S u b j e c t Key I d e n t i f i e r . <br>
34 ∗ A e x t e n s o S u b j e c t Key I d e n t i f i e r em f o r m a t o ASN . 1 : <br>
35 ∗ S u b j e c t K e y I d e n t i f i e r : := K e y I d e n t i f i e r
36 ∗37 ∗ @access p u b l i c
38 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
39 ∗ /
40 c l a s s
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n S u b j e c t K e y I d e n t i f i e r E x t e n s i o n C L
41 e x t e n d s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n S u b j e c t K e y I d e n t i f i e r E x t e n s i o n
328
42 {43
44 p r i v a t e $ k e y I d e n t i f i e r ;
45
46 /∗ ∗47 ∗ C o n s t r u t o r .<br>
48 ∗49 ∗ /
50 p u b l i c f u n c t i o n c o n s t r u c t ( ) {51
52 $ o i d F a c t o r y = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
53
54 / / pega OID usando f a c t o r y
55 $ t h i s−>ex tn ID = $ o i d F a c t o r y−>g e t O b j e c t I d e n t i f i e r B y C o d e (
56 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y : :
EXTENSION SUBJECT KEY IDENTIFIER ) ;
57
58 / / segundo a RFC , e s t a e x t e n s o SEMPRE s e r FALSE
59 $ t h i s−> c r i t i c a l = FALSE ;
60 }61
62 /∗ ∗63 ∗ Re torna o v a l o r da e x t e n s o S u b j e c t Key I d e n t i f i e r .
64 ∗65 ∗ @access p u b l i c
66 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
67 ∗ @return s t r i n g v a l o r da e x t e n s o
68 ∗ /
69 p u b l i c f u n c t i o n g e t K e y I d e n t i f i e r ( )
70 {71 r e t u r n ( s t r i n g ) $ t h i s−>k e y I d e n t i f i e r ;
72 }73
74 /∗ ∗75 ∗ S e t a o v a l o r da e x t e n s o S u b j e c t Key I d e n t i f i e r .
76 ∗77 ∗ @access p u b l i c
78 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
79 ∗ @param s t r i n g o v a l o r em h e x a d e c i m a l a s e r s e t a d o
80 ∗ @return v o i d
81 ∗ /
82 p u b l i c f u n c t i o n s e t K e y I d e n t i f i e r ( $keyId )
329
83 {84 i f ( Z e n d V a l i d a t e : : i s ( $keyId , ’Hex’ ) ) {85 $ t h i s−>k e y I d e n t i f i e r = $keyId ;
86 } e l s e {87 th row new E x c e p t i o n ( " V a r i v e l somente pode ser setada
88 com valores Hexadecimais" ) ;
89 }90 }91
92 /∗ ∗93 ∗ Re torna o v a l o r da e x t e n s o
94 ∗95 ∗ @access p u b l i c
96 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
97 ∗ @return s t r i n g o v a l o r
98 ∗ /
99 p u b l i c f u n c t i o n g e t V a l u e ( )
100 {101 }102
103 /∗ ∗104 ∗ Re torna o v a l o r da e x t e n s o em base 64
105 ∗106 ∗ @access p u b l i c
107 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
108 ∗ @return s t r i n g o v a l o r
109 ∗ /
110 p u b l i c f u n c t i o n ge tBase64Va lue ( )
111 {112 }113
114 } /∗ end o f c l a s s S u b j e c t K e y I d e n t i f i e r E x t e n s i o n C L ∗ /
115
116 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − c l a s s . CRLReasonCodeExtensionCL . php
7 ∗8 ∗ $ Id$
330
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 2 9 : 0 9
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u d e CRLReasonCodeExtension
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/
CRLReasonCodeExtensionInterface.php’ ) ;
27
28 /∗ ∗29 ∗ S h o r t d e s c r i p t i o n o f c l a s s CRLReasonCodeExtensionCL
30 ∗31 ∗ @access p u b l i c
32 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
33 ∗ /
34 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C R L R e a s o n C o d e E x t e n s i o n C L
35 imp lemen t s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C R L R e a s o n C o d e E x t e n s i o n
36 {37 c o n s t UNSPECIFIED = 0 ;
38
39 c o n s t KEY COMPROMISE = 1 ;
40
41 c o n s t CA COMPROMISE = 2 ;
42
43 c o n s t AFFILIATION CHANGED = 3 ;
44
45 c o n s t SUPERSEDED = 4 ;
46
47 c o n s t CESSATION OF OPERATION = 5 ;
48
49 c o n s t CERTIFICATE HOLD = 6 ;
50
331
51 c o n s t REMOVE FROM CRL = 8 ;
52
53 c o n s t PRIVILEGE WITHDRAWN = 9 ;
54
55 c o n s t AA COMPROMISE = 1 0 ;
56
57 p r i v a t e $reasonCode ;
58
59 /∗ ∗60 ∗ C o n s t r u t o r .<br>
61 ∗62 ∗ /
63 p u b l i c f u n c t i o n c o n s t r u c t ( ) {64
65 $ o i d F a c t o r y = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
66
67 / / pega OID usando f a c t o r y
68 $ t h i s−>ex tn ID = $ o i d F a c t o r y−>g e t O b j e c t I d e n t i f i e r B y C o d e (
69 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y : :
EXTENSION REASON CODE) ;
70
71 / / segundo a RFC , e s t a e x t e n s o N O C R T I C A
72 }73
74 /∗ ∗75 ∗ S h o r t d e s c r i p t i o n o f method getCode
76 ∗77 ∗ @access p u b l i c
78 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
79 ∗ @return i n t
80 ∗ /
81 p u b l i c f u n c t i o n getCode ( )
82 {83 r e t u r n $ t h i s−>reasonCode ;
84 }85
86 p u b l i c f u n c t i o n se tCode ( $code )
87 {88 / / e x p r e s s o n o pode t e r 7
89 i f ( ereg ( ’^([0-6]|[8-9]|10){1}$’ , $code ) ) {90 $ t h i s−>reasonCode = $code ;
91 } e l s e {
332
92 th row new E x c e p t i o n ( ’ P a r m e t r o "code" da e x t e n s o
CRLReasonCode i n v l i d o ’ ) ;
93 }94 }95
96 /∗ ∗97 ∗ Re torna o v a l o r da e x t e n s o
98 ∗99 ∗ @access p u b l i c
100 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
101 ∗ @return s t r i n g o v a l o r
102 ∗ /
103 p u b l i c f u n c t i o n g e t V a l u e ( )
104 {105 }106
107 /∗ ∗108 ∗ Re torna o v a l o r da e x t e n s o em base 64
109 ∗110 ∗ @access p u b l i c
111 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
112 ∗ @return s t r i n g o v a l o r
113 ∗ /
114 p u b l i c f u n c t i o n ge tBase64Va lue ( )
115 {116 }117
118 } /∗ end o f c l a s s CRLReasonCodeExtensionCL ∗ /
119
120 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − c l a s s . KeyUsageExtens ionCL . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 3 0 : 3 7
333
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i KeyUsageEx tens ion
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/
KeyUsageExtensionInterface.php’ ) ;
27 r e q u i r e o n c e ( ’Labsec/Security/Certification/ObjectIdentifierFactory.php’ ) ;
28
29 /∗ ∗30 ∗ Re torna uma l i s t a com as p e r m i s s e s d e f i n i d a s na e x t e n s o Key Usage
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ /
35 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n C L
36 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n K e y U s a g e E x t e n s i o n
37 {38 / / c o n s t a n t e s de c l a s s e
39
40 c o n s t DIGITAL SIGNATURE = 0 ;
41
42 c o n s t NON REPUDIATION = 1 ;
43
44 c o n s t KEY ENCIPHERMENT = 2 ;
45
46 c o n s t DATA ENCIPHERMENT = 3 ;
47
48 c o n s t KEY AGREEMENT = 4 ;
49
50 c o n s t KEY CERT SIGN = 5 ;
51
52 c o n s t CRL SIGN = 6 ;
53
54 c o n s t ENCIPHER ONLY = 7 ;
334
55
56 c o n s t DECIPHER ONLY = 8 ;
57
58 p r i v a t e $ u s a g e s ;
59
60 /∗ ∗61 ∗ C o n s t r u t o r .<br>
62 ∗63 ∗ /
64 p u b l i c f u n c t i o n c o n s t r u c t ( ) {65
66 $ o i d F a c t o r y = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
67
68 / / pega OID usando f a c t o r y
69 $ t h i s−>ex tn ID = $ o i d F a c t o r y−>g e t O b j e c t I d e n t i f i e r B y C o d e (
70 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y : :
EXTENSION KEY USAGE) ;
71
72 / / segundo a RFC , RECOMENDA s e r c r i t i c a l . Mas n o o b r i g a
73 }74
75 /∗ ∗76 ∗ Re torna uma l i s t a com as p e r m i s s e s d e f i n i d a s na e x t e n s o Key
Usage .
77 ∗78 ∗ @access p u b l i c
79 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
80 ∗ @return a r r a y a r r a y c o n t e n d o as c o n s t a n t e s que e s t o d e f i n i d a s como
TRUE .
81 ∗ /
82 p u b l i c f u n c t i o n g e t U s a g e s L i s t ( )
83 {84 r e t u r n $ t h i s−>u s a g e s ;
85 }86
87 /∗ ∗88 ∗ M t o d o que a l t e r a os b i t s da e x t e n s o Key Usage . <br>
89 ∗90 ∗ @access p u b l i c
91 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
92 ∗ @param i n t usage Uma c o n s t a n t e ( d e f i n i d a na c l a s s e ) , r e p r e s e n t a n d o
93 ∗ qua l p e r m i s s o v a i s e r a d i c i o n a d o .
335
94 ∗ @param boo lean v a l u e P a r m e t r o o p c i o n a l . E s t e p a r m e t r o s e r v e
95 ∗ para e s p e c i f i c a r o v a l o r da p e r m i s s o d e f i n i d a em v a l u e .
96 ∗ @return v o i d
97 ∗ /
98 p u b l i c f u n c t i o n addUsage ( $usage , $ v a l u e = t rue )
99 {100 i f ( ereg ( "[0-8]" , $usage ) ) {101 i f ( i s b o o l ( $ v a l u e ) ) {102 $ t h i s−>u s a g e s [ "$usage" ] = $ v a l u e ;
103 } e l s e {104 th row new E x c e p t i o n ( ’O valor do p a r m e t r o "value" DEVE ser
booleano.’ ) ;
105 }106 } e l s e {107 th row new E x c e p t i o n ( ’O valor do p a r m e t r o "usage" DEVE ser
num rico , ’ .
108 ’e estar entre 0 e 8’ ) ;
109 }110 }111
112 /∗ ∗113 ∗ Re torna TRUE se a p e r m i s s o de uso da chave f o r p e r m i t i d o . <br>
114 ∗ F a l s e caso c o n t r r i o .
115 ∗116 ∗ @access p u b l i c
117 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
118 ∗ @param i n t usage Uma c o n s t a n t e ( d e f i n i d a na c l a s s e ) , r e p r e s e n t a n d o
119 ∗ qua l p e r m i s s o v a i s e r a d i c i o n a d o .
120 ∗ @return boo lean TRUE caso s e j a p e r m i t i d o a u t i l i z a o da chave
121 ∗ para o f i m d e f i n i d o no p a r m e t r o usage .
122 ∗ /
123 p u b l i c f u n c t i o n i sAl lowedUsage ( $usage )
124 {125 i f ( ereg ( "[0-8]" , $usage ) ) {126 r e t u r n $ t h i s−>u s a g e s [ "$usage" ] ;
127 } e l s e {128 th row new E x c e p t i o n ( ’O valor do p a r m e t r o "usage" DEVE ser
num rico , ’ .
129 ’e estar entre 0 e 8’ ) ;
130 }131 }132
133 /∗ ∗
336
134 ∗ Re torna o v a l o r da e x t e n s o
135 ∗136 ∗ @access p u b l i c
137 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
138 ∗ @return s t r i n g o v a l o r
139 ∗ /
140 p u b l i c f u n c t i o n g e t V a l u e ( )
141 {142 }143
144 /∗ ∗145 ∗ Re torna o v a l o r da e x t e n s o em base 64
146 ∗147 ∗ @access p u b l i c
148 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
149 ∗ @return s t r i n g o v a l o r
150 ∗ /
151 p u b l i c f u n c t i o n ge tBase64Va lue ( )
152 {153 }154
155 } /∗ end o f c l a s s KeyUsageExtens ionCL ∗ /
156
157 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − c l a s s . Ex tendedKeyUsageExtens ionCL . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 2 9 : 3 5
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
337
19 }20
21 /∗ ∗22 ∗ i n c l u d e Ex t endedKeyUsageEx tens ion
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/
ExtendedKeyUsageExtensionInterface.php’ ) ;
27
28 /∗ ∗29 ∗ S h o r t d e s c r i p t i o n o f c l a s s Ex tendedKeyUsageExtens ionCL
30 ∗31 ∗ @access p u b l i c
32 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
33 ∗ /
34 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n E x t e n d e d K e y U s a g e E x t e n s i o n C L
35 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n E x t e n d e d K e y U s a g e E x t e n s i o n
36 {37 p r i v a t e $extKeyUsages = array ( ) ;
38
39 /∗ ∗40 ∗ C o n s t r u t o r .<br>
41 ∗42 ∗ /
43 p u b l i c f u n c t i o n c o n s t r u c t ( )
44 {45
46 $ o i d F a c t o r y = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
47
48 / / pega OID usando f a c t o r y
49 $ t h i s−>ex tn ID = $ o i d F a c t o r y−>g e t O b j e c t I d e n t i f i e r B y C o d e (
50 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y : :
EXTENSION EXTENDED KEY USAGE) ;
51
52 / / segundo a RFC , e s t a e x t e n s o pode ou n o s e r c r i t i c a l
53 }54
55 /∗ ∗56 ∗ S h o r t d e s c r i p t i o n o f method addUsage
57 ∗58 ∗ @access p u b l i c
338
59 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
60 ∗ @param O b j e c t I d e n t i f i e r
61 ∗ @return v o i d
62 ∗ /
63 p u b l i c f u n c t i o n addUsage (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id )
64 {65 $ t h i s−>extKeyUsages [ ] = $o id ;
66 }67
68 /∗ ∗69 ∗ S h o r t d e s c r i p t i o n o f method ge tUsages
70 ∗71 ∗ @access p u b l i c
72 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
73 ∗ @return a r r a y
74 ∗ /
75 p u b l i c f u n c t i o n g e t U s a g e s ( )
76 {77 i f ( count ( $ t h i s−>extKeyUsages ) > 0) {78 r e t u r n $ t h i s−>extKeyUsages ;
79 } e l s e {80 th row new E x c e p t i o n ( "Tamanho de extKeyUsages menor que 1." ) ;
81 }82 }83
84 /∗ ∗85 ∗ Re torna o v a l o r da e x t e n s o
86 ∗87 ∗ @access p u b l i c
88 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
89 ∗ @return s t r i n g o v a l o r
90 ∗ /
91 p u b l i c f u n c t i o n g e t V a l u e ( )
92 {93 }94
95 /∗ ∗96 ∗ Re torna o v a l o r da e x t e n s o em base 64
97 ∗98 ∗ @access p u b l i c
99 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
100 ∗ @return s t r i n g o v a l o r
339
101 ∗ /
102 p u b l i c f u n c t i o n ge tBase64Va lue ( )
103 {104 }105
106 } /∗ end o f c l a s s Ex tendedKeyUsageExtens ionCL ∗ /
107
108 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ t e s t e − c l a s s . A u t h o r i t y K e y I d e n t i f i e r E x t e n s i o n . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f t e s t e .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 6 . 0 7 . 2 0 0 7 , 1 2 : 3 8 : 2 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i E x t e n s i o n
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/
AuthorityKeyIdentifierExtensionInterface.php’ ) ;
27 r e q u i r e o n c e ( ’Labsec/Security/Certification/ObjectIdentifierFactory.php’ ) ;
28
29 /∗ ∗30 ∗ C l a s s e que imp lemen ta a e x t e n s o A u t h o r i t y Key I d e n t i f i e r . <br>
31 ∗ A e x t e n s o A u t h o r i t y Key em f o r m a t o ASN . 1 : <br>
32 ∗ A u t h o r i t y K e y I d e n t i f i e r : := SEQUENCE { <br>
33 ∗ k e y I d e n t i f i e r [ 0 ] K e y I d e n t i f i e r OPTIONAL , <br>
340
34 ∗ a u t h o r i t y C e r t I s s u e r [ 1 ] GeneralNames OPTIONAL , <br>
35 ∗ a u t h o r i t y C e r t S e r i a l N u m b e r [ 2 ] C e r t i f i c a t e S e r i a l N u m b e r OPTIONAL } <br
>
36 ∗<br>
37 ∗ K e y I d e n t i f i e r : := OCTET STRING <br>
38 ∗ <br>
39 ∗ C e r t i f i c a t e S e r i a l N u m b e r : := INTEGER <br>
40 ∗ <br>
41 ∗42 ∗43 ∗ @access p u b l i c
44 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
45 ∗ /
46 c l a s s
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n A u t h o r i t y K e y I d e n t i f i e r E x t e n s i o n C L
47 e x t e n d s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n A u t h o r i t y K e y I d e n t i f i e r E x t e n s i o n
48 {49 p r i v a t e $ k e y I d e n t i f i e r ;
50
51 p r i v a t e $ a u t h o r i t y C e r t I s s u e r ;
52
53 p r i v a t e $ a u t h o r i t y C e r t S e r i a l N u m b e r ;
54
55 /∗ ∗56 ∗ C o n s t r u t o r .<br>
57 ∗ S e t a o ID do e x t e n s o A u t h o r i t y Key I d e n t i f i e r
58 ∗59 ∗ /
60 p u b l i c f u n c t i o n c o n s t r u c t ( ) {61
62 $ o i d F a c t o r y = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
63
64 / / pega OID usando f a c t o r y
65 $ t h i s−>ex tn ID = $ o i d F a c t o r y−>g e t O b j e c t I d e n t i f i e r B y C o d e (
66 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y : :
EXTENSION AUTHORITY KEY IDENTIFIER ) ;
67
68 / / segundo a RFC , e s t a e x t e n s o SEMPRE s e r FALSE
69 $ t h i s−> c r i t i c a l = FALSE ;
70 }
341
71
72 /∗ ∗73 ∗ Re torna o v a l o r da e x t e n s o
74 ∗75 ∗ @access p u b l i c
76 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
77 ∗ @return s t r i n g o v a l o r
78 ∗ /
79 p u b l i c f u n c t i o n g e t V a l u e ( )
80 {81 }82
83 /∗ ∗84 ∗ Re torna o v a l o r da e x t e n s o em base 64
85 ∗86 ∗ @access p u b l i c
87 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
88 ∗ @return s t r i n g o v a l o r
89 ∗ /
90 p u b l i c f u n c t i o n ge tBase64Va lue ( )
91 {92 }93
94 /∗ ∗95 ∗ S e t a o k e y I d e n t i f i e r da e x t e n s o A u t h o r i t y Key I d e n t i f i e r
96 ∗97 ∗ @access p u b l i c
98 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
99 ∗ @param s t r i n g K e y I d e n t i f i e r
100 ∗ @return v o i d
101 ∗ /
102 p u b l i c f u n c t i o n s e t K e y I d e n t i f i e r ( $keyId ) {103 $ t h i s−>k e y I d e n t i f i e r = ( s t r i n g ) $keyId ;
104 }105
106 /∗ ∗107 ∗ Re torna o k e y I d e n t i f i e r da e x t e n s o A u t h o r i t y Key I d e n t i f i e r
108 ∗109 ∗ @access p u b l i c
110 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
111 ∗ @return s t r i n g K e y I d e n t i f i e r na forma de o c t e t o s separado por
”:” .
112 ∗ /
342
113 p u b l i c f u n c t i o n g e t K e y I d e n t i f i e r ( ) {114 i f ( i s s e t ( $ t h i s−>k e y I d e n t i f i e r ) ) {115 $ r e s u l t = ( s t r i n g ) $ t h i s−>k e y I d e n t i f i e r ;
116 } e l s e {117 $ r e s u l t = n u l l ;
118 }119 r e t u r n $ r e s u l t ;
120 }121
122 /∗ ∗123 ∗ S e t a o a u t h o r i t y C e r t I s s u e r da e x t e n s o A u t h o r i t y Key I d e n t i f i e r
124 ∗125 ∗ @access p u b l i c
126 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
127 ∗ @param GeneralNames O( s ) GeneralName do e m i s s o r do c e r t i f i c a d o
da a u t o r i d a d e c e r t i f i c a d o r a
128 ∗ @return v o i d
129 ∗ /
130 p u b l i c f u n c t i o n s e t A u t h o r i t y C e r t I s s u e r (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e s $ i s s u e r ) {131 $ t h i s−>a u t h o r i t y C e r t I s s u e r = $ i s s u e r ;
132 }133
134 /∗ ∗135 ∗ Re torna o a u t h o r i t y C e r t I s s u e r da e x t e n s o A u t h o r i t y Key
I d e n t i f i e r
136 ∗137 ∗ @access p u b l i c
138 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
139 ∗ @return GeneralNames O a u t h o r i t y C e r t I s s u e r da e x t e n s o
A u t h o r i t y Key I d e n t i f i e r
140 ∗ /
141 p u b l i c f u n c t i o n g e t A u t h o r i t y C e r t I s s u e r ( ) {142 r e t u r n $ t h i s−>a u t h o r i t y C e r t I s s u e r ;
143 }144
145 /∗ ∗146 ∗ S e t a o a u t h o r i t y C e r t S e r i a l N u m b e r da e x t e n s o A u t h o r i t y Key
I d e n t i f i e r
147 ∗148 ∗ @access p u b l i c
149 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
343
150 ∗ @param mixed O n m e r o s e r i a l do c e r t i f i c a d o da a u t o r i d a d e
c e r t i f i c a d o r a .
151 ∗ @return v o i d
152 ∗ /
153 p u b l i c f u n c t i o n s e t A u t h o r i t y C e r t S e r i a l N u m b e r ( $ s e r i a l ) {154 i f ( i s n u m e r i c ( $ s e r i a l ) ) {155 $ t h i s−>a u t h o r i t y C e r t S e r i a l N u m b e r = $ s e r i a l ;
156 } e l s e {157 th row new E x c e p t i o n ( ’O n m e r o serial do campo
AuthorityCertSerialNumber’ .
158 ’DEVE ser n m e r i c o (inteiro, double, hexadecimal ,
etc)’ ) ;
159 }160 }161
162 /∗ ∗163 ∗ Re torna o a u t h o r i t y C e r t S e r i a l N u m b e r da e x t e n s o A u t h o r i t y Key
I d e n t i f i e r
164 ∗165 ∗ @access p u b l i c
166 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
167 ∗ @return i n t O a u t h o r i t y C e r t S e r i a l N u m b e r da e x t e n s o A u t h o r i t y
Key I d e n t i f i e r
168 ∗ /
169 p u b l i c f u n c t i o n g e t A u t h o r i t y C e r t S e r i a l N u m b e r ( ) {170 i f ( i s s e t ( $ t h i s−>a u t h o r i t y C e r t S e r i a l N u m b e r ) ) {171 $ r e s u l t a d o = ( i n t ) $ t h i s−>a u t h o r i t y C e r t S e r i a l N u m b e r
;
172 } e l s e {173 $ r e s u l t a d o = n u l l ;
174 }175
176 r e t u r n $ r e s u l t a d o ;
177 }178
179 } /∗ end o f c l a s s A u t h o r i t y K e y I d e n t i f i e r E x t e n s i o n C L ∗ /
180 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗
344
6 ∗ s g c i − c l a s s . C e r t i f i c a t e P o l i c i e s E x t e n s i o n C L . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 2 6 : 3 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i C e r t i f i c a t e P o l i c i e s E x t e n s i o n
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/
CertificatePoliciesExtensionInterface.php’ ) ;
27
28 /∗ ∗29 ∗ C l a s s e r e s p o n s v e l por i m p l e m e n t a r a i n t e r f a c e r e s p o n s v e l p e l a
e x t e n s o
30 ∗ C e r t i f i c a t e P o l i c i e s . <br>
31 ∗ A e x t e n s o em f o r m a t o ASN . 1 : <br>
32 ∗ c e r t i f i c a t e P o l i c i e s : := SEQUENCE SIZE ( 1 . . MAX) OF
P o l i c y I n f o r m a t i o n
33 ∗34 ∗ @access p u b l i c
35 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
36 ∗ /
37 c l a s s
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C e r t i f i c a t e P o l i c i e s E x t e n s i o n C L
38 e x t e n d s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C e r t i f i c a t e P o l i c i e s E x t e n s i o n
39 {40 p r i v a t e $ p o l i c y I n f o r m a t i o n = array ( ) ;
41
42 /∗ ∗43 ∗ C o n s t r u t o r .<br>
345
44 ∗45 ∗ /
46 p u b l i c f u n c t i o n c o n s t r u c t ( ) {47
48 $ o i d F a c t o r y = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
49
50 / / pega OID usando f a c t o r y
51 $ t h i s−>ex tn ID = $ o i d F a c t o r y−>g e t O b j e c t I d e n t i f i e r B y C o d e (
52 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y : :
EXTENSION CERTIFICATE POLICIES ) ;
53
54 / / segundo a RFC , e s t a e x t e n s o pode ou n o s e r c r i t i c a l
55 }56
57 /∗ ∗58 ∗ A d i c i o n a P o l i c y I n f o r m a t i o n .
59 ∗60 ∗ @access p u b l i c
61 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
62 ∗ @param P o l i c y I n f o r m a t i o n Um o b j e t o do t i p o P o l i c y I n f o r m a t i o n para
a d i c i o n a r .
63 ∗ @return v o i d
64 ∗ /
65 p u b l i c f u n c t i o n a d d P o l i c y I n f o r m a t i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n P o l i c y P o l i c y I n f o r m a t i o n
$ p o l i c y I n f o )
66 {67 / / TODO v e r i f i c a r se n e c e s s r i o alguma v e r i f i c a o !
68 $ t h i s−>p o l i c y I n f o r m a t i o n [ ] = $ p o l i c y I n f o ;
69 }70
71 /∗ ∗72 ∗ Re torna os C e r t i f i c a t e P o l i c i e s
73 ∗74 ∗ @access p u b l i c
75 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
76 ∗ @return a r r a y Re torna uma a r r a y c o n t e n d o em cada l i n h a um o b j e t o
77 ∗ do t i p o C e r t i f i c a t e P o l i c y
78 ∗ /
79 p u b l i c f u n c t i o n g e t P o l i c i e s I n f o r m a t i o n ( )
80 {81 r e t u r n $ t h i s−>p o l i c y I n f o r m a t i o n ;
346
82 }83
84 /∗ ∗85 ∗ Re torna o v a l o r da e x t e n s o
86 ∗87 ∗ @access p u b l i c
88 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
89 ∗ @return s t r i n g o v a l o r
90 ∗ /
91 p u b l i c f u n c t i o n g e t V a l u e ( )
92 {93 }94
95 /∗ ∗96 ∗ Re torna o v a l o r da e x t e n s o em base 64
97 ∗98 ∗ @access p u b l i c
99 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
100 ∗ @return s t r i n g o v a l o r
101 ∗ /
102 p u b l i c f u n c t i o n ge tBase64Va lue ( )
103 {104 }105
106 } /∗ end o f c l a s s C e r t i f i c a t e P o l i c i e s E x t e n s i o n C L ∗ /
107
108 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − c l a s s . S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n C L . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 3 1 : 0 6
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
347
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u d e S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/
SubjectAlternativeNameExtensionInterface.php’ ) ;
27
28 /∗ ∗29 ∗ S h o r t d e s c r i p t i o n o f c l a s s S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n C L
30 ∗31 ∗ @access p u b l i c
32 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
33 ∗ /
34 c l a s s
L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n C L
35 e x t e n d s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n
36 {37
38 p r i v a t e $genera lNames = array ( ) ;
39
40 /∗ ∗41 ∗ C o n s t r u t o r .<br>
42 ∗43 ∗ /
44 p u b l i c f u n c t i o n c o n s t r u c t ( ) {45
46 $ o i d F a c t o r y = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
47
48 / / pega OID usando f a c t o r y
49 $ t h i s−>ex tn ID = $ o i d F a c t o r y−>g e t O b j e c t I d e n t i f i e r B y C o d e (
50 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y : :
EXTENSION SUBJECT ALTERNATIVE NAME) ;
51
52 / / segundo a RFC , e s t a e x t e n s o pode ou n o s e r c r i t i c a l
348
53 $ t h i s−> c r i t i c a l = TRUE ;
54 }55
56 /∗ ∗57 ∗ S h o r t d e s c r i p t i o n o f method s e t S u b j e c t A l t e r n a t i v e N a m e
58 ∗59 ∗ @access p u b l i c
60 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
61 ∗ @param GeneralNames
62 ∗ @return v o i d
63 ∗ /
64 p u b l i c f u n c t i o n s e t S u b j e c t A l t e r n a t i v e N a m e (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s G e n e r a l N a m e s
$genera lNames )
65 {66 $ t h i s−>genera lNames [ ] = $genera lNames ;
67 }68
69 /∗ ∗70 ∗ S h o r t d e s c r i p t i o n o f method g e t S u b j e c t A l t e r n a t i v e N a m e
71 ∗72 ∗ @access p u b l i c
73 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
74 ∗ @return GeneralNames
75 ∗ /
76 p u b l i c f u n c t i o n g e t S u b j e c t A l t e r n a t i v e N a m e ( )
77 {78 r e t u r n $ t h i s−>genera lNames ;
79 }80
81 /∗ ∗82 ∗ Re torna o v a l o r da e x t e n s o
83 ∗84 ∗ @access p u b l i c
85 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
86 ∗ @return s t r i n g o v a l o r
87 ∗ /
88 p u b l i c f u n c t i o n g e t V a l u e ( )
89 {90 }91
92 /∗ ∗93 ∗ Re torna o v a l o r da e x t e n s o em base 64
349
94 ∗95 ∗ @access p u b l i c
96 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
97 ∗ @return s t r i n g o v a l o r
98 ∗ /
99 p u b l i c f u n c t i o n ge tBase64Va lue ( )
100 {101 }102
103 } /∗ end o f c l a s s S u b j e c t A l t e r n a t i v e N a m e E x t e n s i o n C L ∗ /
104
105 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − c l a s s . B a s i c C o n s t r a i n t s E x t e n s i o n C L . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 2 5 : 3 1
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u i B a s i c C o n s t r a i n t s E x t e n s i o n
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/
BasicConstraintsExtensionInterface.php’ ) ;
27 r e q u i r e o n c e ( ’Labsec/Security/Certification/ObjectIdentifierFactory.php’ ) ;
28
29 /∗ ∗
350
30 ∗ S h o r t d e s c r i p t i o n o f c l a s s B a s i c C o n s t r a i n t s E x t e n s i o n C L
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ /
35 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n B a s i c C o n s t r a i n t s E x t e n s i o n C L
36 e x t e n d s L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n B a s i c C o n s t r a i n t s E x t e n s i o n
37 {38
39 c o n s t INFINITE = −1;
40
41 p r i v a t e $ca = FALSE ;
42
43 p r i v a t e $ p a t h L e n g t h ;
44
45 /∗ ∗46 ∗ C o n s t r u t o r <br>
47 ∗ /
48 p u b l i c f u n c t i o n c o n s t r u c t ( ) {49
50 $ o i d F a c t o r y = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
51
52 / / pega OID usando f a c t o r y
53 $ t h i s−>ex tn ID = $ o i d F a c t o r y−>g e t O b j e c t I d e n t i f i e r B y C o d e (
54 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y : :
EXTENSION BASIC CONSTRAINTS ) ;
55
56 / / segundo a RFC , e s t a e x t e n s o pode s e r c r i t i c a ou n o
57 }58
59 /∗ ∗60 ∗ S h o r t d e s c r i p t i o n o f method se tCa
61 ∗62 ∗ @access p u b l i c
63 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
64 ∗ @return v o i d
65 ∗ /
66 p u b l i c f u n c t i o n s e t C a ( $ v a l u e = TRUE)
67 {68 i f ( i s b o o l ( $ v a l u e ) ) {69 $ t h i s−>ca = $ v a l u e ;
70 } e l s e {
351
71 $ t h i s−>ca = TRUE ;
72 }73 }74
75 /∗ ∗76 ∗ S h o r t d e s c r i p t i o n o f method isCa
77 ∗78 ∗ @access p u b l i c
79 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
80 ∗ @return boo lean
81 ∗ /
82 p u b l i c f u n c t i o n i sCa ( )
83 {84 r e t u r n ( boo l ) $ t h i s−>ca ;
85 }86
87 /∗ ∗88 ∗ S h o r t d e s c r i p t i o n o f method s e t P a t h L e n g t h
89 ∗90 ∗ @access p u b l i c
91 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
92 ∗ @param i n t
93 ∗ @return v o i d
94 ∗ /
95 p u b l i c f u n c t i o n s e t P a t h L e n g t h ( $ l e n g t h )
96 {97 / / RFC d e f i n e
98 $ t h i s−>ca = t rue ;
99
100 i f ( i s n u m e r i c ( $ l e n g t h ) ) {101 $ t h i s−>p a t h L e n g t h = $ l e n g t h ;
102 } e l s e {103 th row new E x c e p t i o n ( " P a r m e t r o I n v l i d o : length.
Deve ser n u m r i c o " ) ;
104 }105 }106
107 /∗ ∗108 ∗ S h o r t d e s c r i p t i o n o f method g e t P a t h L e n g t h
109 ∗110 ∗ @access p u b l i c
111 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
112 ∗ @return i n t
352
113 ∗ /
114 p u b l i c f u n c t i o n g e t P a t h L e n g t h ( )
115 {116 i f ( i s s e t ( $ t h i s−>p a t h L e n g t h ) ) {117 $ r e s u l t a d o = ( i n t ) $ t h i s−>p a t h L e n g t h ;
118 } e l s e {119 $ r e s u l t a d o = n u l l ;
120 }121
122 r e t u r n $ r e s u l t a d o ;
123 }124
125 /∗ ∗126 ∗ Re torna o v a l o r da e x t e n s o
127 ∗128 ∗ @access p u b l i c
129 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
130 ∗ @return s t r i n g o v a l o r
131 ∗ /
132 p u b l i c f u n c t i o n g e t V a l u e ( )
133 {134 }135
136 /∗ ∗137 ∗ Re torna o v a l o r da e x t e n s o em base 64
138 ∗139 ∗ @access p u b l i c
140 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
141 ∗ @return s t r i n g o v a l o r
142 ∗ /
143 p u b l i c f u n c t i o n ge tBase64Va lue ( )
144 {145 }146
147 } /∗ end o f c l a s s B a s i c C o n s t r a i n t s E x t e n s i o n C L ∗ /
148
149 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗
353
6 ∗ s g c i − c l a s s . CRLNumberExtensionCL . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 2 8 : 0 6
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 /∗ ∗22 ∗ i n c l u d e CRLNumberExtension
23 ∗24 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
25 ∗ /
26 r e q u i r e o n c e ( ’Labsec/Security/Certification/Extension/
CRLNumberExtensionInterface.php’ ) ;
27
28 /∗ ∗29 ∗ S h o r t d e s c r i p t i o n o f c l a s s CRLNumberExtensionCL
30 ∗31 ∗ @access p u b l i c
32 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
33 ∗ /
34 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C R L N u m b e r E x t e n s i o n C L
35 imp lemen t s
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n C R L N u m b e r E x t e n s i o n
36 {37
38 p r i v a t e $number ;
39
40 /∗ ∗41 ∗ C o n s t r u t o r .<br>
42 ∗43 ∗ /
44 p u b l i c f u n c t i o n c o n s t r u c t ( ) {45
354
46 $ o i d F a c t o r y = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y ( ) ;
47
48 / / pega OID usando f a c t o r y
49 $ t h i s−>ex tn ID = $ o i d F a c t o r y−>g e t O b j e c t I d e n t i f i e r B y C o d e (
50 L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r F a c t o r y : :
EXTENSION CRL NUMBER) ;
51
52 / / segundo a RFC , e s t a e x t e n s o n o pode s e r c r i t i c a l
53 }54
55 /∗ ∗56 ∗ S h o r t d e s c r i p t i o n o f method getNumber
57 ∗58 ∗ @access p u b l i c
59 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
60 ∗ @return i n t
61 ∗ /
62 p u b l i c f u n c t i o n getNumber ( )
63 {64 r e t u r n $ t h i s−>number ;
65 }66
67 /∗ ∗68 ∗ S h o r t d e s c r i p t i o n o f method setNumber
69 ∗70 ∗ @access p u b l i c
71 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
72 ∗ @param i n t
73 ∗ @return v o i d
74 ∗ /
75 p u b l i c f u n c t i o n setNumber ( $number )
76 {77 i f ( Z e n d V a l i d a t e : : i s ( $number , ’Hex’ ) ) {78 $ t h i s−>number = $number ;
79 } e l s e {80 th row new E x c e p t i o n ( ’ P a r m e t r o "number" deve ser hexadecimal’ )
;
81 }82 }83
84 /∗ ∗85 ∗ Re torna o v a l o r da e x t e n s o
355
86 ∗87 ∗ @access p u b l i c
88 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
89 ∗ @return s t r i n g o v a l o r
90 ∗ /
91 p u b l i c f u n c t i o n g e t V a l u e ( )
92 {93 }94
95 /∗ ∗96 ∗ Re torna o v a l o r da e x t e n s o em base 64
97 ∗98 ∗ @access p u b l i c
99 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
100 ∗ @return s t r i n g o v a l o r
101 ∗ /
102 p u b l i c f u n c t i o n ge tBase64Va lue ( )
103 {104 }105
106 } /∗ end o f c l a s s CRLNumberExtensionCL ∗ /
107
108 ?>
1 <?php
2 e r r o r r e p o r t i n g ( E ALL ) ;
3
4 /∗ ∗5 ∗ s g c i − c l a s s . CRLEntryCL . php
6 ∗7 ∗ $ Id$
8 ∗9 ∗ T h i s f i l e i s p a r t o f s g c i .
10 ∗11 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 2 1 : 0 5
12 ∗13 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
14 ∗ /
15
16 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {17 d i e ( ’This file was generated for PHP 5’ ) ;
18 }19
356
20 /∗ ∗21 ∗ i n c l u i CRLEntry
22 ∗23 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
24 ∗ /
25 r e q u i r e o n c e ( ’Labsec/Security/Certification/CRL/CRLEntry.php’ ) ;
26
27 /∗ ∗28 ∗ C l a s s e c o n c r e t a que imp lemen ta as e n t r a d a da CRL
29 ∗30 ∗ @access p u b l i c
31 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
32 ∗ /
33 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n C R L C R L E n t r y C L
34 imp lemen t s L a b s e c S e c u r i t y C e r t i f i c a t i o n C R L C R L E n t r y
35 {36
37 p r i v a t e $ s e r i a l N u m b e r ;
38
39 p r i v a t e $ r e v o g a t i o n D a t e ;
40
41 p r i v a t e $ e x t e n s i o n s = array ( ) ;
42
43 /∗ ∗44 ∗ Re torna o n m e r o s e r i a l do c e r t i f i c a d o revogado
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @return s t r i n g o n m e r o s e r i a l
49 ∗ /
50 p u b l i c f u n c t i o n g e t S e r i a l N u m b e r ( )
51 {52 r e t u r n $ t h i s−>s e r i a l N u m b e r ;
53 }54
55 /∗ ∗56 ∗ Re torna a da ta de r e v o g a o do c e r t i f i c a d o
57 ∗58 ∗ @access p u b l i c
59 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
60 ∗ @return Zend Date A da ta de r e v o g a o
61 ∗ /
62 p u b l i c f u n c t i o n g e t R e v o c a t i o n D a t e ( )
357
63 {64 r e t u r n $ t h i s−>r e v o g a t i o n D a t e ;
65 }66
67 /∗ ∗68 ∗ Re torna as e x t e n s e s da e n t r a d a da CRL
69 ∗70 ∗ @access p u b l i c
71 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
72 ∗ @return a r r a y Uma a r r a y com as e x t e n s e s de cada e n t r a d a da CRL
73 ∗ /
74 p u b l i c f u n c t i o n g e t E x t e n s i o n s ( )
75 {76 r e t u r n $ t h i s−>e x t e n s i o n s ;
77 }78
79 /∗ ∗80 ∗ Re torna o v a l o r de uma e x t e n s o s o l i c i t a d a .
81 ∗82 ∗ @access p u b l i c
83 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
84 ∗ @param O b j e c t I d e n t i f i e r o OID da e x t e n s o a s e r r e t o r n a d a
85 ∗ @return E x t e n s i o n A e x t e n s o que f o i s o l i c i t a d a . Se n o
e n c o n t r a r
86 ∗ a e x t e n s o , r e t o r n a NULL .
87 ∗ /
88 p u b l i c f u n c t i o n g e t E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id )
89 {90 / / v a r r e o a r r a y
91 foreach ( $ t h i s−>e x t e n s i o n s as $key => $ v a l u e ) {92 i f ( $va lue−>ge t O i d ( ) == $oid−>getOID ( ) ) {93 r e t u r n $ $ v a l u e ;
94 }95 }96 / / s e n o e n c o n t r a r a e x t e n s o , r e t o r n a NULL
97 r e t u r n NULL;
98
99 }100
101 /∗ ∗102 ∗ S e t a o n m e r o S e r i a l
103 ∗
358
104 ∗ @access p u b l i c
105 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
106 ∗ @param s t r i n g o n m e r o s e r i a l em h e x a d e c i m a l
107 ∗ @return v o i d
108 ∗ /
109 p u b l i c f u n c t i o n s e t S e r i a l N u m b e r ( $ s e r i a l )
110 {111 i f ( Z e n d V a l i d a t e : : i s ( $ s e r i a l , ’Hex’ ) ) {112 $ t h i s−>s e r i a l N u m b e r = $ s e r i a l ;
113 } e l s e {114 th row new E x c e p t i o n ( ’ P a r m e t r o "serial" deve ser
um hexa’ ) ;
115 }116 }117
118 /∗ ∗119 ∗ A d i c i o n a uma e x t e n s o
120 ∗121 ∗ @access p u b l i c
122 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
123 ∗ @param E x t e n s i o n a e x t e n s o a a d i c i o n a r
124 ∗ @return v o i d
125 ∗ /
126 p u b l i c f u n c t i o n a d d E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n $ e x t e n s i o n )
127 {128 $ t h i s−>e x t e n s i o n s [ ] = $ e x t e n s i o n ;
129 }130
131 /∗ ∗132 ∗ S e t a a da ta de r e v o g a o da e n t r a d a da CRL
133 ∗134 ∗ @access p u b l i c
135 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
136 ∗ @param Zend Date a da ta de r e v o g a o do c e r t i f i c a d o
137 ∗ @return v o i d
138 ∗ /
139 p u b l i c f u n c t i o n s e t R e v o c a t i o n D a t e ( Zend Date $ d a t e )
140 {141 $ t h i s−>r e v o g a t i o n D a t e = $ d a t e ;
142 }143
144 } /∗ end o f c l a s s CRLEntryCL ∗ /
359
145
146 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗6 ∗ s g c i − c l a s s . C e r t i f i c a t e B u i l d e r C L . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 1 8 : 5 0
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 r e q u i r e o n c e ( ’Labsec/Security/Certification/CertificateBuilderInterface.php
’ ) ;
22
23 /∗ ∗24 ∗ S h o r t d e s c r i p t i o n o f c l a s s C e r t i f i c a t e B u i l d e r C L
25 ∗26 ∗ @access p u b l i c
27 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
28 ∗ /
29 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e B u i l d e r C L
30 imp lemen t s L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e B u i l d e r
31 {32
33 p r i v a t e $ s u b j e c t ;
34
35 p r i v a t e $ i s s u e r ;
36
37 p r i v a t e $ v e r s i o n ;
38
39 p r i v a t e $ s e r i a l N u m b e r ;
360
40
41 p r i v a t e $ s i g n a t u r e ;
42
43 p r i v a t e $ n o t A f t e r ;
44
45 p r i v a t e $ n o t B e f o r e ;
46
47 p r i v a t e $ s u b j e c t P u b l i c K e y ;
48
49 p r i v a t e $ e x t e n s i o n s ;
50
51 p r i v a t e $ d a t a ;
52
53 p r i v a t e $ t y p e ;
54
55 /∗ ∗56 ∗ S h o r t d e s c r i p t i o n o f method c o n s t r u c t
57 ∗58 ∗ @access p u b l i c
59 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
60 ∗ @param C e r t i f i c a t e R e q u e s t
61 ∗ @return v o i d
62 ∗ /
63 p u b l i c f u n c t i o n c o n s t r u c t (
L a b s e c S e c u r i t y C e r t i f i c a t i o n R e q u e s t C e r t i f i c a t e R e q u e s t
$ r e q u e s t = n u l l )
64 {65 i f ( $ r e q u e s t != NULL) {66 / / TODO FAZER
67 }68 }69
70 /∗ ∗71 ∗ S h o r t d e s c r i p t i o n o f method s e t S u b j e c t
72 ∗73 ∗ @access p u b l i c
74 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
75 ∗ @param RDNSequence
76 ∗ @return v o i d
77 ∗ /
78 p u b l i c f u n c t i o n s e t S u b j e c t (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e $ s u b j e c t )
79 {
361
80 $ t h i s−>s u b j e c t = $ s u b j e c t ;
81 }82
83 /∗ ∗84 ∗ S h o r t d e s c r i p t i o n o f method s e t I s s u e r
85 ∗86 ∗ @access p u b l i c
87 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
88 ∗ @param RDNSequence
89 ∗ @return v o i d
90 ∗ /
91 p u b l i c f u n c t i o n s e t I s s u e r (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e $ i s s u e r )
92 {93 $ t h i s−> i s s u e r = $ i s s u e r ;
94 }95
96 /∗ ∗97 ∗ S h o r t d e s c r i p t i o n o f method s e t S e r i a l N u m b e r
98 ∗99 ∗ @access p u b l i c
100 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
101 ∗ @param s t r i n g
102 ∗ @return v o i d
103 ∗ /
104 p u b l i c f u n c t i o n s e t S e r i a l N u m b e r ( $ s e r i a l )
105 {106 $ t h i s−>s e r i a l N u m b e r = $ s e r i a l ;
107 }108
109 /∗ ∗110 ∗ S h o r t d e s c r i p t i o n o f method s e t P u b l i c K e y
111 ∗112 ∗ @access p u b l i c
113 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
114 ∗ @return v o i d
115 ∗ /
116 p u b l i c f u n c t i o n s e t P u b l i c K e y ( L a b s e c S e c u r i t y C r y p t o P u b l i c K e y
$pubKey )
117 {118 $ t h i s−>s u b j e c t P u b l i c K e y = $pubKey ;
119 }120
362
121 /∗ ∗122 ∗ S h o r t d e s c r i p t i o n o f method s e t N o t B e f o r e
123 ∗124 ∗ @access p u b l i c
125 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
126 ∗ @param Zend Date
127 ∗ @return v o i d
128 ∗ /
129 p u b l i c f u n c t i o n s e t N o t B e f o r e ( Zend Date $ n o t B e f o r e )
130 {131 $ t h i s−>n o t B e f o r e = $ n o t B e f o r e ;
132 }133
134 /∗ ∗135 ∗ S h o r t d e s c r i p t i o n o f method s e t N o t A f t e r
136 ∗137 ∗ @access p u b l i c
138 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
139 ∗ @param Zend Date
140 ∗ @return v o i d
141 ∗ /
142 p u b l i c f u n c t i o n s e t N o t A f t e r ( Zend Date $ n o t A f t e r )
143 {144 $ t h i s−>n o t A f t e r = $ n o t A f t e r ;
145 }146
147 /∗ ∗148 ∗ S h o r t d e s c r i p t i o n o f method a d d E x t e n s i o n
149 ∗150 ∗ @access p u b l i c
151 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
152 ∗ @param E x t e n s i o n
153 ∗ @return v o i d
154 ∗ /
155 p u b l i c f u n c t i o n a d d E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n $ e x t e n s i o n )
156 {157 $ t h i s−>c e r t i f i c a t e −>s e t V e r s i o n ( 3 ) ;
158
159 $ t h i s−>e x t e n s i o n s [ ] = $ e x t e n s i o n ;
160 }161
162 /∗ ∗
363
163 ∗ S h o r t d e s c r i p t i o n o f method a d d E x t e n s i o n s
164 ∗165 ∗ @access p u b l i c
166 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
167 ∗ @param a r r a y
168 ∗ @return v o i d
169 ∗ /
170 p u b l i c f u n c t i o n a d d E x t e n s i o n s ( $ e x t e n s i o n s )
171 {172 i f ( i s a r r a y ( $ e x t e n s i o n s ) ) {173 foreach ( $ e x t e n s i o n s as $ e x t e n s a o ) {174 i f ( $ e x t e n s a o i n s t a n c e o f
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n )
{175 $ t h i s−>e x t e n s i o n s = $ e x t e n s a o ;
176 } e l s e {177 th row new E x c e p t i o n ( ’O p a r m e t r o
$extensions DEVE ser um array
178 com elementos somento do
tipo Extension’ ) ;
179 }180 }181 } e l s e {182 th row new E x c e p t i o n ( ’O p a r m e t r o $extensions DEVE
ser array.’ ) ;
183 }184 }185
186 /∗ ∗187 ∗ S h o r t d e s c r i p t i o n o f method s i g n
188 ∗189 ∗ @access p u b l i c
190 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
191 ∗ @param P r i v a t e K e y
192 ∗ @param s t r i n g
193 ∗ @param C e r t i f i c a t e T e m p l a t e a
194 ∗ @param s t r i n g
195 ∗ @return C e r t i f i c a t e
196 ∗ /
197 p u b l i c f u n c t i o n s i g n ( L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y $ p r i v a t e K e y
, $hashAlgor i thm ,
198 L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e T e m p l a t e $ t e m p a t e
= n u l l , $ e x t r a A r g s = n u l l )
364
199 {200 / / TODO APLICAR TEMPLATE . . . .
201
202 $ d a t a = l i b c r y p t o s e c i s s u e c e r t i f i c a t e (
203 $ t h i s−>s e r i a l Nu mb er ,
204 $ t h i s−>i s s u e r−>g e t E n t r i e s ( ) ,
205 $ t h i s−>s u b j e c t−>g e t E n t r i e s ( ) ,
206 $ t h i s−>n o t B e f o r e−>ge tTimes tamp ( ) ,
207 $ t h i s−>n o t A f t e r−>ge tTimes tamp ( ) ,
208 $ t h i s−>s u b j e c t P u b l i c K e y−>getPemEncoded ( ) ,
209 $ p r i v a t e K e y−>getPemEncoded ( ) ,
210 $password ="" ,
211 L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
c o n v e r t C e r t i f i c a t e E x t e n s i o n s T o A r r a y ( $ t h i s−>
e x t e n s i o n s )
212 ) ;
213
214 p r i n t r ( new L a b s e c C L S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e C L (
$ d a t a ) ) ;
215 e x i t ( 0 ) ;
216
217 r e t u r n new L a b s e c C L S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e C L (
$ d a t a ) ;
218 }219
220 } /∗ end o f c l a s s C e r t i f i c a t e B u i l d e r C L ∗ /
221
222 ?>
1 <?php
2 / / TODO t e r m i n a r d o c u m e n t a o
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − c l a s s . C e r t i f i c a t e R e v o c a t i o n L i s t C L . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 2 2 : 3 3
14 ∗
365
15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 /∗ ∗23 ∗ i n c l u i C e r t i f i c a t e R e v o c a t i o n L i s t
24 ∗25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 r e q u i r e o n c e ( ’Labsec/Security/Certification/
CertificateRevocationListInterface.php’ ) ;
28
29 /∗ ∗30 ∗ S h o r t d e s c r i p t i o n o f c l a s s C e r t i f i c a t e R e v o c a t i o n L i s t C L
31 ∗32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ /
35 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e R e v o c a t i o n L i s t C L
36 imp lemen t s L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e R e v o c a t i o n L i s t
37 {38
39 p r i v a t e $ s e r i a l N u m b e r ;
40
41 p r i v a t e $ i s s u e r ;
42
43 p r i v a t e $ t h i s U p d a t e ;
44
45 p r i v a t e $nex tUpda t e ;
46
47 / / TODO c a l c u l a r a u t o m a t i c a m e n t e v e r s i o n
48 p r i v a t e $ v e r s i o n ;
49
50 p r i v a t e $ e x t e n s i o n s ;
51
52 p r i v a t e $ e n t r i e s = array ( ) ;
53
54 p r i v a t e $ d a t a ;
55
56 p r i v a t e $ t y p e ;
366
57
58 /∗ ∗59 ∗ S h o r t d e s c r i p t i o n o f method getPem
60 ∗61 ∗ @access p u b l i c
62 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
63 ∗ @return s t r i n g
64 ∗ /
65 p u b l i c f u n c t i o n getPem ( )
66 {67 i f ( $ t h i s−>t y p e == ’PEM’ ) {68 $ r e s u l t a d o = $ t h i s−>d a t a ;
69 } e l s e {70 $ r e s u l t a d o = L a b s e c C L S e c u r i t y U t i l C o n v e r t e r s : : derToPem ( $ t h i s
−>da ta , L a b s e c C L S e c u r i t y U t i l C o n v e r t e r s : : CRL) ;
71 }72
73 r e t u r n $ r e s u l t a d o ;
74 }75
76 /∗ ∗77 ∗ S h o r t d e s c r i p t i o n o f method ge tDer
78 ∗79 ∗ @access p u b l i c
80 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
81 ∗ @return v o i d
82 ∗ /
83 p u b l i c f u n c t i o n ge tD e r ( )
84 {85 i f ( $ t h i s−>t y p e == ’DER’ ) {86 $ r e s u l t a d o = $ t h i s−>d a t a ;
87 } e l s e {88 $ r e s u l t a d o = L a b s e c C L S e c u r i t y U t i l C o n v e r t e r s : : pemToDer ( $ t h i s
−>da ta , L a b s e c C L S e c u r i t y U t i l C o n v e r t e r s : : CRL) ;
89 }90
91 r e t u r n $ r e s u l t a d o ;
92 }93
94 /∗ ∗95 ∗ S h o r t d e s c r i p t i o n o f method g e t V e r s i o n
96 ∗97 ∗ @access p u b l i c
367
98 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
99 ∗ @return i n t
100 ∗ /
101 p u b l i c f u n c t i o n g e t V e r s i o n ( )
102 {103 r e t u r n $ t h i s−>v e r s i o n ;
104 }105
106 /∗ ∗107 ∗ S h o r t d e s c r i p t i o n o f method g e t I s s u e r
108 ∗109 ∗ @access p u b l i c
110 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
111 ∗ @return RDNSequence
112 ∗ /
113 p u b l i c f u n c t i o n g e t I s s u e r ( )
114 {115 r e t u r n $ t h i s−> i s s u e r ;
116 }117
118 /∗ ∗119 ∗ S h o r t d e s c r i p t i o n o f method g e t T h i s U p d a t e
120 ∗121 ∗ @access p u b l i c
122 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
123 ∗ @return Zend Date
124 ∗ /
125 p u b l i c f u n c t i o n g e t T h i s U p d a t e ( )
126 {127 r e t u r n $ t h i s−>t h i s U p d a t e ;
128 }129
130 /∗ ∗131 ∗ S h o r t d e s c r i p t i o n o f method g e t N e x t U p d a t e
132 ∗133 ∗ @access p u b l i c
134 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
135 ∗ @return Zend Date
136 ∗ /
137 p u b l i c f u n c t i o n ge tNex tUpda t e ( )
138 {139 r e t u r n $ t h i s−>ne x t U p d a t e ;
140 }
368
141
142 /∗ ∗143 ∗ S h o r t d e s c r i p t i o n o f method g e t E x t e n s i o n s
144 ∗145 ∗ @access p u b l i c
146 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
147 ∗ @return a r r a y
148 ∗ /
149 p u b l i c f u n c t i o n g e t E x t e n s i o n s ( )
150 {151 r e t u r n $ t h i s−>e x t e n s i o n s ;
152 }153
154 /∗ ∗155 ∗ S h o r t d e s c r i p t i o n o f method g e t E x t e n s i o n
156 ∗157 ∗ @access p u b l i c
158 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
159 ∗ @param O b j e c t I d e n t i f i e r
160 ∗ @return E x t e n s i o n
161 ∗ /
162 p u b l i c f u n c t i o n g e t E x t e n s i o n ( O b j e c t I d e n t i f i e r $o id )
163 {164 foreach ( $ t h i s−>e x t e n s i o n s as $key => $ v a l u e ) {165 i f ( $va lue−>getOID ( ) == $oid−>getOID ( ) ) {166 r e t u r n $ v a l u e ;
167 }168 }169
170 r e t u r n n u l l ;
171
172 }173
174 /∗ ∗175 ∗ S h o r t d e s c r i p t i o n o f method ge tUnknownEx tens ions
176 ∗177 ∗ @access p u b l i c
178 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
179 ∗ @return a r r a y
180 ∗ /
181 p u b l i c f u n c t i o n ge tUnknownExtens ions ( )
182 {
369
183 r e t u r n l i b c r y p t o s e c c r l e x t e n s i o n g e t u n k n o w n e x t e n s i o n s ( $ t h i s−>
getPem ( ) ) ;
184 }185
186 /∗ ∗187 ∗ S h o r t d e s c r i p t i o n o f method v e r i f y S i g n a t u r e
188 ∗189 ∗ @access p u b l i c
190 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
191 ∗ @return boo lean
192 ∗ /
193 p u b l i c f u n c t i o n v e r i f y S i g n a t u r e ( )
194 {195 / / TODO TERMINAR , QUANDO M DULO ESTIVER PRONTO
196 r e t u r n l i b c r y p t o s e c c r l v e r i f y s i g n a t u r e ( $ t h i s−>getPem ( ) ) ;
197 }198
199 /∗ ∗200 ∗ S h o r t d e s c r i p t i o n o f method g e t C R L E n t r i e s
201 ∗202 ∗ @access p u b l i c
203 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
204 ∗ @return CRLEntry
205 ∗ /
206 p u b l i c f u n c t i o n g e t C R L E n t r i e s ( )
207 {208 r e t u r n $ t h i s−>e n t r i e s ;
209 }210
211 /∗ ∗212 ∗ S h o r t d e s c r i p t i o n o f method i s R e v o k e d
213 ∗214 ∗ @access p u b l i c
215 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
216 ∗ @param C e r t i f i c a t e
217 ∗ @return boo lean
218 ∗ /
219 p u b l i c f u n c t i o n i sRevoked ( L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e
$ c e r t i f i c a t e )
220 {221 / / v a r r e as e n t r a d a s da CRL , em busca do c e r t i f i c a d o
222 foreach ( $ t h i s−>e n t r i e s a s $key => $ v a l u e ) {
370
223 i f ( $va lue−>g e t S e r i a l N u m b e r ( ) == $ c e r t i f i c a t e −>g e t S e r i a l N u m b e r
( ) ) {224 / / s e achar r e t o r n a t r u e
225 r e t u r n t rue ;
226 }227 }228 / / s e n o achar , r e t o r n a f a l s e
229 r e t u r n f a l s e ;
230 }231
232 / / p r i v a t e f u n c t i o n pemToDer ( $pem data )
233 / / {234 / / $ be g i n = ”X509 CRL−−−−−”;
235 / / $end = ”−−−−−END”;
236 / /
237 / / $pem data = s u b s t r ( $pem data , s t r p o s ( $pem data , $ be g in )+ s t r l e n (
$ be g in ) ) ;
238 / / $pem data = s u b s t r ( $pem data , 0 , s t r p o s ( $pem data , $end ) ) ;
239 / /
240 / / $der = b a s e 6 4 d e c o d e ( $pem data ) ;
241 / /
242 / / r e t u r n $der ;
243 / / }244 / /
245 / / p r i v a t e f u n c t i o n derToPem ( $ d e r d a t a )
246 / / {247 / / $pem = c h u n k s p l i t ( b a s e 6 4 e n c o d e ( $ d e r d a t a ) , 64 , ”\n ”) ;
248 / /
249 / / $pem = ”−−−−−BEGIN X509 CRL−−−−−\n ” . $pem.”−−−−−END X509 CRL−−−−−\n ”;
250 / /
251 / / r e t u r n $pem ;
252 / / }253
254 } /∗ end o f c l a s s C e r t i f i c a t e R e v o c a t i o n L i s t C L ∗ /
255
256 ?>
1 <?php
2
3 e r r o r r e p o r t i n g ( E ALL ) ;
4
5 /∗ ∗
371
6 ∗ s g c i − i n t e r f a c e . C e r t i f i c a t e . php
7 ∗8 ∗ $ Id$
9 ∗10 ∗ T h i s f i l e i s p a r t o f s g c i .
11 ∗12 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 2 9 . 0 8 . 2 0 0 7 , 1 8 : 2 5 : 2 7
13 ∗14 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
15 ∗ /
16
17 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {18 d i e ( ’This file was generated for PHP 5’ ) ;
19 }20
21 r e q u i r e o n c e ( ’Labsec/Security/Certification/CertificateInterface.php’ ) ;
22 r e q u i r e o n c e ( ’Labsec/Security/Certification/DataTypes/RDNSequence.php’ ) ;
23 r e q u i r e o n c e ( ’Labsec/Security/Crypto/PublicKey.php’ ) ;
24 r e q u i r e o n c e ( ’LabsecCL/Security/Util/Parsers.php’ ) ;
25 r e q u i r e o n c e ( ’LabsecCL/Security/Util/Converters.php’ ) ;
26
27 r e q u i r e o n c e ( ’Zend/Date.php’ ) ;
28
29
30 /∗ ∗31 ∗ C l a s s e que r e p r e s e n t a um C e r t i f i c a t o D i g i t a l X . 5 0 9
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ /
36 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e C L
37 imp lemen t s L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e
38 {39 p r i v a t e $ s u b j e c t ;
40
41 p r i v a t e $ i s s u e r ;
42
43 p r i v a t e $ v e r s i o n ;
44
45 p r i v a t e $ s e r i a l N u m b e r ;
46
47 p r i v a t e $ s i g n a t u r e A l g o r i t h m ;
48
372
49 p r i v a t e $ n o t A f t e r ;
50
51 p r i v a t e $ n o t B e f o r e ;
52
53 p r i v a t e $ s u b j e c t P u b l i c K e y I n f o ;
54
55 p r i v a t e $ e x t e n s i o n s ;
56
57 p r i v a t e $ d a t a ;
58
59 /∗ ∗60 ∗ C o n s t r u t o r . Cr ia um c e r t i f i c a d o a p a r t i r de dados pa s s a d o s
61 ∗ como p a r m e t r o
62 ∗63 ∗ @access p u b l i c
64 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
65 ∗ @param var os dados do c e r t i f i c a d o
66 ∗ @param s t r i n g o f o r m a t o dos dados (PEM/DER) . E s t e p a r m e t r o
67 ∗ o p c i o n a l . O v a l o r d e f a u l t PEM.
68 ∗ @return v o i d
69 ∗ /
70 p u b l i c f u n c t i o n c o n s t r u c t ( $da ta , $ t y p e = ’PEM’ )
71 {72 i f ( ( $ t y p e !== ’PEM’ ) && ( $ t y p e !== ’DER’ ) ) {73 th row new E x c e p t i o n ( " P a r m e t r o type da classe
CerificateCL i n v l i d o " ) ;
74 }75
76 / / s e o p a r m e t r o f o r passado , c o n s t r i o c e r t i f i c a d o a
p a r t i r dos dados
77 / / do a r q u i v o passado como p a r m e t r o
78 i f ( $ d a t a != n u l l ) {79
80 / / s e f o r DER, t r a n s f o r m a em PEM.
81 / / i n t e r n a m e n t e , a c l a s s e u t i l i z a somente em f o r m a t o
PEM
82 i f ( $ t y p e === ’DER’ ) {83 $ d a t a = L a b s e c C L S e c u r i t y U t i l C o n v e r t e r s : :
derToPem ( $da ta ,
L a b s e c C L S e c u r i t y U t i l C o n v e r t e r s : :
CERTIFICATE ) ;
84 }85
373
86 / / passa os dados para a t r i b u t o da c l a s s e , para s e r
u t i l i z a d o em o u t r o s m t o d o s
87 $ t h i s−>d a t a = $ d a t a ;
88
89 / / S u b j e c t
90 / / pega o s u b j e c t
91 $ a r r a y = l i b c r y p t o s e c c e r t i f i c a t e g e t s u b j e c t ( $ d a t a
) ;
92 / / t r a n s f o r m a em um RDNSequence e s e t a o s u b j e c t
93 $ t h i s−>s u b j e c t = L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
t ransformArrayToRDNSequence ( $ a r r a y ) ;
94 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
95
96 / / I s s u e r
97 / / pega o i s s u e r
98 $ a r r a y = l i b c r y p t o s e c c e r t i f i c a t e g e t i s s u e r ( $ d a t a )
;
99 / / t r a n s f o r m a em um RDNSequence e s e t a o s u b j e c t
100 $ t h i s−> i s s u e r = L a b s e c C L S e c u r i t y U t i l P a r s e r s : :
t ransformArrayToRDNSequence ( $ a r r a y ) ;
101 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
102
103 / / Se r ia lNumber
104 / / pega o ser ia lNumber , e s e t a o a t r i b u t o
105 $ t h i s−>s e r i a l N u m b e r = ( i n t )
l i b c r y p t o s e c c e r t i f i c a t e g e t s e r i a l n u m b e r ( $ d a t a
) ;
106 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
107
108 / / N o t B e f o r e
109 / / pega o n o t B e f o r e , e s e t a o a t r i b u t o
110 $ t h i s−>n o t B e f o r e = new Zend Date (
l i b c r y p t o s e c c e r t i f i c a t e g e t n o t b e f o r e ( $ d a t a ) ,
Zend Date : : TIMESTAMP) ;
111 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
374
112
113 / / N o t A f t e r
114 / / pega o N o t A f t e r , e s e t a o a t r i b u t o
115 $ t h i s−>n o t A f t e r = new Zend Date (
l i b c r y p t o s e c c e r t i f i c a t e g e t n o t a f t e r ( $ d a t a ) ,
Zend Date : : TIMESTAMP) ;
116 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
117
118 / / V e r s i o n
119 / / pega a v e r s o do c e r t i f i c a d o , e s e t a o a t r i b u t o
120 $ t h i s−>v e r s i o n = ( i n t ) (
l i b c r y p t o s e c c e r t i f i c a t e g e t v e r s i o n ( $ d a t a ) + 1)
;
121 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
122
123 / / S i g n a t u r e
124 $ t h i s−>s i g n a t u r e A l g o r i t h m =
l i b c r y p t o s e c c e r t i f i c a t e g e t m e s s a g e d i g e s t a l g o r i t h m
( $ d a t a ) ;
125 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
126
127 / / S u b j e c t P u b l i c K e y I n f o
128 $pubKey = l i b c r y p t o s e c c e r t i f i c a t e g e t p u b l i c k e y (
$ d a t a ) ;
129
130 $ t h i s−>s u b j e c t P u b l i c K e y I n f o = new
L a b s e c S e c u r i t y C r y p t o P u b l i c K e y ( $pubKey [ ’key’ ] ,
"PEM" ) ;
131 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
132
133 / / E x t e n s i o n s
134 $ t h i s−>e x t e n s i o n s = L a b s e c C L S e c u r i t y U t i l P a r s e r s
: : c o n v e r t C e r t i f i c a t e E x t e n s i o n s ( $ d a t a ) ;
135 / /
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−//
375
136
137 / / TODO Fazer m t o o d o para v e r i f i c a r se e s t
con forme a RFC 3280
138
139 } e l s e {140 th row new E x c e p t i o n ( ’Parametro data igual a null’ ) ;
141 }142 }143
144 /∗ ∗145 ∗ Re torna o c e r t i f i c a d o em f o r m a t o PEM
146 ∗147 ∗ @access p u b l i c
148 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
149 ∗ @return s t r i n g O c e r t i f i c a d o em uma s t r i n g no f o r m a t o PEM
150 ∗ /
151 p u b l i c f u n c t i o n getPem ( )
152 {153 / / i n t e r n a m e n t e , SEMPRE v a i e s t a r em f o r m a t o PEM
154 r e t u r n $ t h i s−>d a t a ;
155 }156
157 /∗ ∗158 ∗ Re torna o c e r t i f i c a d o em f o r m a t o DER
159 ∗160 ∗ @access p u b l i c
161 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
162 ∗ @return s t r i n g O c e r t i f i c a d o em uma s t r i n g no f o r m a t o DER
163 ∗ /
164 p u b l i c f u n c t i o n g e t De r ( )
165 {166 / / i n t e r n a m e n t e , SEMPRE v a i e s t a r em f o r m a t o PEM
167 r e t u r n L a b s e c C L S e c u r i t y U t i l C o n v e r t e r s : : pemToDer ( $ t h i s−>
da t a , L a b s e c C L S e c u r i t y U t i l C o n v e r t e r s : : CERTIFICATE ) ;
168 }169
170 /∗ ∗171 ∗ Re torna o s u j e i t o do c e r t i f i c a d o
172 ∗173 ∗ @access p u b l i c
174 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
175 ∗ @return RDNSequence um o b j e t o do t i p o RDNSequence com os
376
176 ∗ campos do s u j e i t o do c e r t i f i c a d o
177 ∗ @throws E x c e p t i o n Quando o s u b j e c t e s t i v e r v a z i o .
178 ∗ /
179 p u b l i c f u n c t i o n g e t S u b j e c t ( )
180 {181 i f ( i s s e t ( $ t h i s−>s u b j e c t ) ) {182 r e t u r n $ t h i s−>s u b j e c t ;
183 } e l s e {184 th row new E x c e p t i o n ( ’Subject vazio!’ ) ;
185 }186 }187
188 /∗ ∗189 ∗ Re torna o e m i s s o r do c e r t i f i c a d o
190 ∗191 ∗ @access p u b l i c
192 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
193 ∗ @return RDNSequence um o b j e t o do t i p o RDNSequence com os
194 ∗ campos do e m i s s o r do c e r t i f i c a d o
195 ∗ @throws E x c e p t i o n Quando o i s s u e r f o r v a z i o
196 ∗ /
197 p u b l i c f u n c t i o n g e t I s s u e r ( )
198 {199 i f ( i s s e t ( $ t h i s−> i s s u e r ) ) {200 r e t u r n $ t h i s−> i s s u e r ;
201 } e l s e {202 th row new E x c e p t i o n ( ’Issuer vazio!’ ) ;
203 }204 }205
206 /∗ ∗207 ∗ Re torna o n m e r o s e r i a l do c e r t i f i c a d o
208 ∗209 ∗ @access p u b l i c
210 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
211 ∗ @return s t r i n g o n m e r o s e r i a l do c e r t i f i c a d o , em f o r m a t o
s t r i n g . O n m e r o s e r i a l e s t em d e c i m a l
212 ∗ @throws E x c e p t i o n Quando o n m e r o s e r i a l f o r v a z i o
213 ∗ /
214 p u b l i c f u n c t i o n g e t S e r i a l N u m b e r ( )
215 {216 i f ( i s s e t ( $ t h i s−>s e r i a l N u m b e r ) ) {217 r e t u r n $ t h i s−>s e r i a l N u m b e r ;
377
218 } e l s e {219 th row new E x c e p t i o n ( ’ N m e r o serial vazio’ ) ;
220 }221 }222
223 /∗ ∗224 ∗ Re torna o a l g o r i t m o de Hash u t i l i z a d o para a s s i n a r o c e r t i f i c a d o
225 ∗ @access p u b l i c
226 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
227 ∗ @return s t r i n g uma s t r i n g r e p r e s e n t a n d o o a l g o r i t m o ( SHA1 ,
SHA256 , MD5, e t c )
228 ∗ @throws E x c e p t i o n Quando o a l g o r i t m o de a s s i n a t u r a f o r v a z i o
229 ∗ /
230 p u b l i c f u n c t i o n g e t M e s s a g e D i g e s t A l g o r i t h m ( )
231 {232 i f ( i s s e t ( $ t h i s−>s i g n a t u r e A l g o r i t h m ) ) {233 r e t u r n $ t h i s−>s i g n a t u r e A l g o r i t h m ;
234 } e l s e {235 th row new E x c e p t i o n ( ’Algoritmo de hash utilizado
na assinatura ’
236 . ’do certificado vazio’ ) ;
237 }238 }239
240 /∗ ∗241 ∗ Re torna o campo n o t B e f o r e do c e r t i f i c a d o
242 ∗243 ∗ @access p u b l i c
244 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
245 ∗ @return Zend Date A da ta do campo n o t B e f o r e do c e r t i f i c a d o
246 ∗ @throws E x c e p t i o n Quando a da ta n o t B e f o r e e s t i v e r v a z i a
247 ∗ /
248 p u b l i c f u n c t i o n g e t N o t B e f o r e ( )
249 {250 i f ( i s s e t ( $ t h i s−>n o t B e f o r e ) ) {251 r e t u r n $ t h i s−>n o t B e f o r e ;
252 } e l s e {253 th row new E x c e p t i o n ( ’Data notBefore do certificado
e s t vazia’ ) ;
254 }255 }256
257 /∗ ∗
378
258 ∗ Re torna o campo n o t A f t e r do c e r t i f i c a d o
259 ∗260 ∗ @access p u b l i c
261 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
262 ∗ @return Zend Date A da ta do campo n o t A f t e r do c e r t i f i c a d o
263 ∗ @throws E x c e p t i o n Quando a da ta n o t A f t e r e s t i v e r v a z i a
264 ∗ /
265 p u b l i c f u n c t i o n g e t N o t A f t e r ( )
266 {267 i f ( i s s e t ( $ t h i s−>n o t A f t e r ) ) {268 r e t u r n $ t h i s−>n o t A f t e r ;
269 } e l s e {270 th row new E x c e p t i o n ( ’Data notBefore do certificado
e s t vazia’ ) ;
271 }272 }273
274 /∗ ∗275 ∗ Re torna a v e r s o do c e r t i f i c a d o
276 ∗277 ∗ @access p u b l i c
278 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
279 ∗ @return i n t a v e r s o do c e r t i f i c a d o
280 ∗ @throws E x c e p t i o n Quando a v e r s o e s t i v e r v a z i a
281 ∗ /
282 p u b l i c f u n c t i o n g e t V e r s i o n ( )
283 {284 i f ( i s s e t ( $ t h i s−>v e r s i o n ) ) {285 r e t u r n $ t h i s−>v e r s i o n ;
286 } e l s e {287 th row new E x c e p t i o n ( ’O campo v e r s o do certificado
e s t vazio’ ) ;
288 }289 }290
291 /∗ ∗292 ∗ Re torna a chave p b l i c a do c e r t i f i c a d o
293 ∗294 ∗ @access p u b l i c
295 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
296 ∗ @return mixed a chave p b l i c a
297 ∗ @throws E x c e p t i o n Quando a chave p b l i c a e s t i v e r v a z i a
298 ∗ /
379
299 p u b l i c f u n c t i o n g e t P u b l i c K e y ( )
300 {301 i f ( i s s e t ( $ t h i s−>s u b j e c t P u b l i c K e y I n f o [ ’publickey’ ] ) ) {302 r e t u r n $ t h i s−>s u b j e c t P u b l i c K e y I n f o [ ’publickey’ ] ;
303 } e l s e {304 th row new E x c e p t i o n ( ’A chave p b l i c a e s t vazia’ )
;
305 }306 }307
308 /∗ ∗309 ∗ V e r i f i c a a a s s i n a t u r a do c e r t i f i c a d o
310 ∗311 ∗ @access p u b l i c
312 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
313 ∗ @return boo lean TRUE caso a a s s i n a t u r a e s t e j a c o r r e t a , FALSE
caso
314 ∗ c o n t r r i o
315 ∗ /
316 p u b l i c f u n c t i o n v e r i f y S i g n a t u r e (
L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e $ i s s u e r )
317 {318 r e t u r n l i b c r y p t o s e c c e r t i f i c a t e v e r i f y s i g n a t u r e ( $ t h i s−>
da t a , $ i s s u e r−>getPem ( ) ) ;
319 }320
321 /∗ ∗322 ∗ Re torna as e x t e n s e s
323 ∗324 ∗ @access p u b l i c
325 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
326 ∗ @return a r r a y Uma Array com as e x t e n s e s do c e r t i f i c a d o
327 ∗ /
328 p u b l i c f u n c t i o n g e t E x t e n s i o n s ( )
329 {330 r e t u r n $ t h i s−>e x t e n s i o n s ;
331 }332
333 /∗ ∗334 ∗ A p a r t i r de um OID , procura um e x t e n s o . Se a e x t e n s o e x i s t i r
no c e r t i f i c a d o ,
335 ∗ r e t o r n a a e x t e n s o . Se n o e x i s t i r , r e t o r n a NULL .
336 ∗
380
337 ∗ @access p u b l i c
338 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
339 ∗ @param O b j e c t I d e n t i f i e r o OID da e x t e n s o a p r o c u r a r
340 ∗ @return E x t e n s i o n a E x t e n s o
341 ∗ /
342 p u b l i c f u n c t i o n g e t E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id )
343 {344 r e t u r n $ t h i s−>e x t e n s i o n s [ $oid−>getOID ( ) ] ;
345 }346
347 /∗ ∗348 ∗ Re torna a ” i m p r e s s o d i g i t a l ” ( i d e n t i f i c a d o r ) do c e r t i f i c a d o
349 ∗350 ∗ @access p u b l i c
351 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
352 ∗ @param i n t uma c o n s t a n t e da c l a s s e MessageDiges t , que r e p r e s e n t a
o a l g o r i t m o
353 ∗ @return s t r i n g a ” i m p r e s s o d i g i t a l ” do c e r t i f i c a d o
354 ∗ /
355 p u b l i c f u n c t i o n g e t F i n g e r p r i n t ( $ a l g o r i t h m ) {356 r e t u r n l i b c r y p t o s e c c e r t i f i c a t e g e t f i n g e r p r i n t ( $ t h i s−>
getPem ( ) , $ a l g o r i t h m ) ;
357 }358
359 /∗ ∗360 ∗ Re torna as e x t e n s e s d e s c o n h e c i d a s p e l a b i b l i o t e c a . As
e x t e n s e s
361 ∗ s o r e t o r n a d a s na forma de um par ( chave , v a l o r )
362 ∗363 ∗ @access p u b l i c
364 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
365 ∗ @return a r r a y uma a r r a y com as e x t e n s e s d e s c o n h e c i d a s
366 ∗ /
367 p u b l i c f u n c t i o n ge tUnknownExtens ions ( ) {368 r e t u r n l i b c r y p t o s e c c e r t i f i c a t e u n k n o w n e x t e n s i o n s ( $ t h i s−>
da t a , $ t h i s−>t y p e ) ;
369 }370
371 /∗ ∗372 ∗ Re torna as i n f o r m a e s da Chave P b l i c a
373 ∗374 ∗ @access p u b l i c
381
375 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
376 ∗ @return var as i n f o r m a o e s da Chave P b l i c a do c e r t i f i c a d o
377 ∗ /
378 p u b l i c f u n c t i o n g e t P u b l i c K e y I n f o ( ) {379 / / TODO ALTERAR QUANDO O MODULO FICAR PRONTO
380 }381
382 } /∗ end o f i n t e r f a c e C e r t i f i c a t e ∗ /
383
384 ?>
1 <?php
2 / / DOC t e r m i n a r d o c u m e n t a o
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − c l a s s . C e r t i f i c a t e T e m p l a t e C L . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 1 9 : 5 5
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
22 /∗ ∗23 ∗ i n c l u d e C e r t i f i c a t e T e m p l a t e a
24 ∗25 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
26 ∗ /
27 r e q u i r e o n c e ( ’Labsec/Security/Certification/CertificateTemplateInterface.
php’ ) ;
28
29 /∗ ∗30 ∗ S h o r t d e s c r i p t i o n o f c l a s s C e r t i f i c a t e T e m p l a t e C L
31 ∗
382
32 ∗ @access p u b l i c
33 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
34 ∗ /
35 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e T e m p l a t e C L
36 imp lemen t s L a b s e c S e c u r i t y C e r t i f i c a t i o n C e r t i f i c a t e T e m p l a t e
37 {38
39 p r i v a t e $ v a l i d i t y D a y s ;
40
41 p r i v a t e $ e x t e n s i o n s = array ( ) ;
42
43 /∗ ∗44 ∗ S h o r t d e s c r i p t i o n o f method s e t V a l i d i t y D a y s
45 ∗46 ∗ @access p u b l i c
47 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
48 ∗ @param i n t
49 ∗ @return v o i d
50 ∗ /
51 p u b l i c f u n c t i o n s e t V a l i d i t y D a y s ( $days )
52 {53 i f ( i s n u m e r i c ( $days ) ) {54 $ t h i s−>v a l i d i t y D a y s = $days ;
55 } e l s e {56 th row new E x c e p t i o n ( ’ P a r m e t r o "days" de
CertificateTemplate deve ser n u m r i c o .’ ) ;
57 }58 }59
60 /∗ ∗61 ∗ S h o r t d e s c r i p t i o n o f method a d d E x t e n s i o n
62 ∗63 ∗ @access p u b l i c
64 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
65 ∗ @param E x t e n s i o n
66 ∗ @return v o i d
67 ∗ /
68 p u b l i c f u n c t i o n a d d E x t e n s i o n ( E x t e n s i o n $ e x t e n s i o n )
69 {70 $ t h i s−>e x t e n s i o n s [ ] = $ e x t e n s i o n ;
71 }72
73 /∗ ∗
383
74 ∗ S h o r t d e s c r i p t i o n o f method a d d E x t e n s i o n s
75 ∗76 ∗ @access p u b l i c
77 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
78 ∗ @param a r r a y
79 ∗ @return v o i d
80 ∗ /
81 p u b l i c f u n c t i o n a d d E x t e n s i o n s ( $ e x t e n s i o n s )
82 {83 foreach ( $ e x t e n s i o n s as $key => $ v a l u e ) {84 i f ( i s s u b c l a s s o f ( $va lue , ’Extension’ ) ) {85 $ t h i s−>e x t e n s i o n s [ ] = $ v a l u e ;
86 } e l s e {87 th row new E x c e p t i o n ( ’A array passada como
par metro , "extensions",’ .
88 ’deve possuir somente itens Exception’ ) ;
89 }90 }91 }92
93 /∗ ∗94 ∗ S h o r t d e s c r i p t i o n o f method g e t V a l i d i t y D a y s
95 ∗96 ∗ @access p u b l i c
97 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
98 ∗ @return i n t
99 ∗ /
100 p u b l i c f u n c t i o n g e t V a l i d i t y D a y s ( )
101 {102 r e t u r n $ t h i s−>v a l i d i t y D a y s ;
103 }104
105 /∗ ∗106 ∗ S h o r t d e s c r i p t i o n o f method g e t E x t e n s i o n
107 ∗108 ∗ @access p u b l i c
109 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
110 ∗ @param O b j e c t I d e n t i f i e r
111 ∗ @return v o i d
112 ∗ /
113 p u b l i c f u n c t i o n g e t E x t e n s i o n ( O b j e c t I d e n t i f i e r $o id )
114 {115 foreach ( $ t h i s−>e x t e n s i o n s as $key => $ v a l u e ) {
384
116 i f ( $va lue−>getOID ( ) == $oid−>getOID ( ) ) {117 r e t u r n $ v a l u e ;
118 }119 }120 r e t u r n n u l l ;
121 }122
123 /∗ ∗124 ∗ S h o r t d e s c r i p t i o n o f method g e t E x t e n s i o n s
125 ∗126 ∗ @access p u b l i c
127 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
128 ∗ @return a r r a y
129 ∗ /
130 p u b l i c f u n c t i o n g e t E x t e n s i o n s ( )
131 {132 r e t u r n $ t h i s−>e x t e n s i o n s ;
133 }134
135 } /∗ end o f c l a s s C e r t i f i c a t e T e m p l a t e C L ∗ /
136
137 ?>
1 <?php
2 / / TODO FAZER DOCUMENTA O
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − i n t e r f a c e . C e r t i f i c a t e R e q u e s t . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 1 4 . 0 8 . 2 0 0 7 , 1 7 : 0 8 : 4 5
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }
385
21
22 /∗ ∗23 ∗ C l a s s e r e s p o n s v e l p e l a r e q u i s i o de c e r t i f i c a d o
24 ∗25 ∗ @access p u b l i c
26 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
27 ∗ /
28 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n R e q u e s t C e r t i f i c a t e R e q u e s t
29 imp lemen t s L a b s e c S e c u r i t y C e r t i f i c a t i o n R e q u e s t C e r t i f i c a t e R e q u e s t
30 {31
32 p r i v a t e $ d a t a ;
33
34 p r i v a t e $pub l i cKey ;
35
36 p r i v a t e $ s u b j e c t ;
37
38 /∗ ∗39 ∗ C o n s t r u t o r . Se f o r passado como p a r m e t r o , l ł a r e q u i s i o .
40 ∗41 ∗ @access p u b l i c
42 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
43 ∗ @return v o i d
44 ∗ /
45 p u b l i c f u n c t i o n c o n s t r u c t ( $da ta , $ t y p e )
46 {47 i f ( $ t y p e == ’DER’ ) {48 $ d a t a = $ t h i s−>derToPem ( $ d a t a ) ;
49 } e l s e i f ( $ t y p e != ’PEM’ ) {50 th row new E x c e p t i n ( ’Type i n v l i d o . Deve ser PEM ou
DER’ ) ;
51 }52
53 $ t h i s−>d a t a = $ d a t a ;
54
55 / / TODO TERMINAR QUANDO M DULO TIVER SUPORTE PARA CRIAR UMA
R E Q U I S I O
56 }57 /∗ ∗58 ∗ Re torna a r e q u i s i o em f o r m a t o PEM
59 ∗60 ∗ @access p u b l i c
61 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
386
62 ∗ @return s t r i n g a r e q u i s i a o em f o r m a t o PEM
63 ∗ /
64 p u b l i c f u n c t i o n getPem ( )
65 {66 r e t u r n $ t h i s−>d a t a ;
67 }68
69 /∗ ∗70 ∗ Re torna a r e q u i s i o em f o r m a t o DER
71 ∗72 ∗ @access p u b l i c
73 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
74 ∗ @return s t r i n g a r e q u i s i a o em f o r m a t o DER
75 ∗ /
76 p u b l i c f u n c t i o n ge tD e r ( )
77 {78 r e t u r n $ t h i s−>pemToDer ( $ t h i s−>d a t a ) ;
79 }80
81 /∗ ∗82 ∗ Re torna achave p b l i c a da r e q u i s i o
83 ∗84 ∗ @access p u b l i c
85 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
86 ∗ @return Pub l i cKey a chave p b l i c a
87 ∗ /
88 p u b l i c f u n c t i o n g e t P u b l i c K e y ( )
89 {90 r e t u r n $ t h i s−>pub l i cKey ;
91 }92
93 /∗ ∗94 ∗ Re torna o S u b j e c t
95 ∗96 ∗ @access p u b l i c
97 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
98 ∗ @return RDNSequence o s u b j e c t
99 ∗ /
100 p u b l i c f u n c t i o n g e t S u b j e c t ( )
101 {102 r e t u r n $ t h i s−>s u b j e c t ;
103 }104
387
105 /∗ ∗106 ∗ Re torna as e x t e n s e s
107 ∗108 ∗ @access p u b l i c
109 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
110 ∗ @return a r r a y Array com as e x t e n s e s
111 ∗ /
112 p u b l i c f u n c t i o n g e t E x t e n s i o n s ( )
113 {114 r e t u r n $ t h i s−>e x t e n s i o n s ;
115 }116
117 /∗ ∗118 ∗ Re torna uma e x t e n s o e s p e c i f i c a . Se a e x t e n s o n o e x i s t i r ,
r e t o r n a NULL
119 ∗120 ∗ @access p u b l i c
121 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
122 ∗ @param O b j e c t I d e n t i f i e r O OID da e x t e n s o a s e r r e t o r n a d a
123 ∗ @return E x t e n s i o n a e x t e n s o
124 ∗ /
125 p u b l i c f u n c t i o n g e t E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n O b j e c t I d e n t i f i e r $o id )
126 {127 foreach ( $ t h i s−>e x t e n s i o n s as $ e x t e n s i o n )
128 {129 i f ( $ e x t e n s i o n−>ge tO id ( ) == $oid−>getOID ( ) ) {130 r e t u r n $ e x t e n s i o n ;
131 }132 }133 }134
135 /∗ ∗136 ∗ Re torna as e x t e n s e s d e s c o n h e c i d a s
137 ∗138 ∗ @access p u b l i c
139 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
140 ∗ @return a r r a y Array com as UnknownExtens ions
141 ∗ /
142 p u b l i c f u n c t i o n ge tUnknownExtens ions ( )
143 {144 r e t u r n
l i b c r y p t o s e c r e q u e s t e x t e n s i o n g e t u n k n o w n e x t e n s i o n s (
388
$ t h i s−>getPem ( ) ) ;
145 }146
147 /∗ ∗148 ∗ V e r i f i c a se a a s s i n a t u r a v l i d a
149 ∗150 ∗ @access p u b l i c
151 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
152 ∗ @return boo lean TRUE caso a a s s i n a t u r a s e j a v l i d a , FALSE caso
c o n t r r i o .
153 ∗ /
154 p u b l i c f u n c t i o n v e r i f y S i g n a t u r e ( )
155 {156 r e t u r n l i b c r y p t o s e c r e q u e s t v e r i f y s i g n a t u r e ( $ t h i s−>getPem
( ) ) ;
157 }158
159 } /∗ end o f i n t e r f a c e C e r t i f i c a t e R e q u e s t ∗ /
160
161 ?>
162 ?>
1 <?php
2 / / TODO FAZER DOCUMENTACAO
3
4 e r r o r r e p o r t i n g ( E ALL ) ;
5
6 /∗ ∗7 ∗ s g c i − i n t e r f a c e . C e r t i f i c a t e R e q u e s t B u i l d e r . php
8 ∗9 ∗ $ Id$
10 ∗11 ∗ T h i s f i l e i s p a r t o f s g c i .
12 ∗13 ∗ A u t o m a t i c g e n e r a t e d w i t h ArgoUML 0 . 2 4 on 0 1 . 1 1 . 2 0 0 7 , 1 3 : 3 6 : 4 3
14 ∗15 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
16 ∗ /
17
18 i f (0 > vers ion compare ( PHP VERSION , ’5’ ) ) {19 d i e ( ’This file was generated for PHP 5’ ) ;
20 }21
389
22 /∗ u s e r d e f i n e d i n c l u d e s ∗ /
23 / / s e c t i o n 127−0−1−1−486c20c2 :1144 c6beb8d :−8000:0000000000000AF0−i n c l u d e s
b e g i n
24 / / s e c t i o n 127−0−1−1−486c20c2 :1144 c6beb8d :−8000:0000000000000AF0−i n c l u d e s
end
25
26 /∗ u s e r d e f i n e d c o n s t a n t s ∗ /
27 / / s e c t i o n 127−0−1−1−486c20c2 :1144 c6beb8d :−8000:0000000000000AF0−c o n s t a n t s
b e g i n
28 / / s e c t i o n 127−0−1−1−486c20c2 :1144 c6beb8d :−8000:0000000000000AF0−c o n s t a n t s
end
29
30 /∗ ∗31 ∗ S h o r t d e s c r i p t i o n o f c l a s s C e r t i f i c a t e R e q u e s t B u i l d e r
32 ∗33 ∗ @access p u b l i c
34 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
35 ∗ /
36 c l a s s L a b s e c C L S e c u r i t y C e r t i f i c a t i o n R e q u e s t C e r t i f i c a t e R e q u e s t B u i l d e r
37 imp lemen t s L a b s e c S e c u r i t y C e r t i f i c a t i o n R e q u e s t C e r t i f i c a t e R e q u e s t B u i l d e r
38 {39
40
41
42 p r i v a t e $pub l i cKey ;
43
44 p r i v a t e $ s u b j e c t ;
45
46 p r i v a t e $ e x t e n s i o n s ;
47 /∗ ∗48 ∗ C o n s t r u t o r . Faz a i n i c i a l i z a o dos a t r i b u t o s da c l a s s e
49 ∗50 ∗ @access p u b l i c
51 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
52 ∗ @return v o i d
53 ∗ /
54 p u b l i c f u n c t i o n c o n s t r u c t ( )
55 {56 / / i n i c i a l i z a v a r i v e i s
57 $ t h i s−>pub l i cKey = new LabsecCL Secur i ty Cryp to KeyCL ( ) ;
58 $ t h i s−>s u b j e c t = new
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e ( ) ;
59 $ t h i s−>e x t e n s i o n s = array ( ) ;
390
60 }61
62
63 /∗ ∗64 ∗ S e t a a chave p b l i c a da r e q u i s i o
65 ∗66 ∗ @access p u b l i c
67 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
68 ∗ @param var chave p b l i c a
69 ∗ @return v o i d
70 ∗ /
71 p u b l i c f u n c t i o n s e t P u b l i c K e y ( L a b s e c S e c u r i t y C r y p t o P u b l i c K e y
$pubKey )
72 {73 / / TODO VERIFICAR O TIPO DE $pubKey
74 $ t h i s−>pub l i cKey = $pubKey ;
75 }76
77 /∗ ∗78 ∗ S e t a o s u j e i t o da r e q u i s i o
79 ∗80 ∗ @access p u b l i c
81 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
82 ∗ @param RDNSequence O s u j e i t o
83 ∗ @return v o i d
84 ∗ /
85 p u b l i c f u n c t i o n s e t S u b j e c t (
L a b s e c S e c u r i t y C e r t i f i c a t i o n D a t a T y p e s R D N S e q u e n c e $rdnSequence
)
86 {87 $ t h i s−>s u b j e c t = $rdnSequence ;
88 }89
90 /∗ ∗91 ∗ A d i c i o n a uma e x t e n s o
92 ∗93 ∗ @access p u b l i c
94 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
95 ∗ @param E x t e n s i o n e x t e n s o a d i c i o n a r
96 ∗ @return v o i d
97 ∗ /
98 p u b l i c f u n c t i o n a d d E x t e n s i o n (
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n $ e x t e n s i o n )
391
99 {100 $ t h i s−>e x t e n s i o n s [ ] = $ e x t e n s i o n ;
101 }102
103 /∗ ∗104 ∗ A d i c i o n a uma l i s t a de e x t e n s e s
105 ∗106 ∗ @access p u b l i c
107 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
108 ∗ @param a r r a y l i s t a de e x t e n s e s a a d i c i o n a r
109 ∗ @return v o i d
110 ∗ /
111 p u b l i c f u n c t i o n a d d E x t e n s i o n s ( $ e x t e n s i o n s )
112 {113 i f ( i s a r r a y ( $ e x t e n s i o n s ) ) {114 foreach ( $ e x t e n s i o n s as $ e x t e n s i o n ) {115 i f ( $ e x t e n s i o n i n s t a n c e o f
L a b s e c S e c u r i t y C e r t i f i c a t i o n E x t e n s i o n
) {116 $ t h i s−>e x t e n s i o n s [ ] = $ e x t e n s i o n ;
117 } e l s e {118 th row new E x c e p t i o n ( ’O p a r m e t r o
$extensions DEVE conter somente
119 elementos do tipo
Labsec_Security_Certification_Extension
’ ) ;
120 }121 }122 } e l s e {123 th row new E x c e p t i o n ( ’O p a r m e t r o $extensions DEVE
ser uma array’ ) ;
124 }125 }126
127 /∗ ∗128 ∗ M t o d o que a s s i n a os dados passados , e c r i a o o b j e t o
C e r t i f i c a t e R e q u e s t
129 ∗130 ∗ @access p u b l i c
131 ∗ @author f i r s t n a m e and l a s t n a m e o f au thor , <author@example . org>
132 ∗ @param P r i v a t e K e y
133 ∗ @param s t r i n g Chave p r i v a d a
134 ∗ @param s t r i n g A l g o r i t m o de Hash
392
135 ∗ @param s t r i n g Argumentos e x t r a s ( o p c i o n a l )
136 ∗ @return C e r t i f i c a t e R e q u e s t
137 ∗ /
138 p u b l i c f u n c t i o n s i g n ( L a b s e c S e c u r i t y C r y p t o P r i v a t e K e y $ p r i v a t e K e y
, $hashAlgor i thm , $ e x t r a A r g s = n u l l )
139 {140 / / TODO FAZER QUANDO O M DULO SUPORTAR!
141 }142
143
144
145 } /∗ end o f i n t e r f a c e C e r t i f i c a t e R e q u e s t B u i l d e r ∗ /
146
147 ?>
Sistema de Gerenciamento de Certificados Digitais ICPEDU
Jonathan Gehard Kohler1, Rogerio Bodemuller Junior1
1 Laboratorio de Seguranca em Computacao (LabSEC)Departamento de Informatica e Estatıstica (INE)Universidade Federal de Santa Catarina (UFSC)
Florianopolis – SC – Brasil
Abstract. This meta-paper describes the style to be used in articles and shortpapers for SBC conferences. For papers in English, you should add just anabstract while for the papers in Portuguese, we also ask for an abstract in Por-tuguese (“resumo”). In both cases, abstracts should not have more than 10 linesand must be in the first page of the paper.
Resumo. Este meta-artigo descreve o estilo a ser usado na confeccao de artigose resumos de artigos para publicacao nos anais das conferencias organizadaspela SBC. E solicitada a escrita de resumo e abstract apenas para os artigosescritos em portugues. Artigos em ingles deverao apresentar apenas abstract.Nos dois casos, o autor deve tomar cuidado para que o resumo (e o abstract)nao ultrapassem 10 linhas cada, sendo que ambos devem estar na primeirapagina do artigo.
1. IntroducaoAtualmente a seguranca das informacoes e algo muito importante, principalmente com osurgimento da internet. Informacoes transmitidas entre 2 pessoas, pela internet, podemser interceptadas. Estas informacoes poderao ter o seu conteudo alterado, ou caso seremconfidenciais, serem lidas (e talvez ate divulgada) por terceiros desautorizados.
Para evitar este tipo de problema no mundo virtual, foram criados os certificadosdigitais. Uma especie de um documento eletronico que “prova” que uma pessoa e elamesma. A utilizacao de certificados digitais necessita de uma estrutura chamada de Infra-Estrutura de Chaves Publicas (ICP). E como se o certificado digital fosse o seu cartaode Cadastro de Pessoa Fısica (CPF), e a ICP fosse a Receita Federal Brasileira (orgaobrasileiro responsavel pelos cartoes de CPFs).
Para administrar estas estruturas, ICPs, existe uma “classe” de programas chamadade Sistemas de Gerenciamento de Certificados (SGC). Sistemas complexos que proveemfuncionalidades para facilitar a administracao de Infra-Estruturas de Chaves Publicas.
O desenvolvimento de programas deste tipo parece muito simples, porem exis-tem requisitos importantes que devem ser satisfeitos por esta “classe” de programas. Osrequisitos demonstrados neste artigo foram detectados a partir da experiencia do desenvol-vimento e manutencao de outro software SGC existente. Na apresentacao dos requisitosserao detalhados os benefıcios e alguns problemas causados pelo mesmo.
2. Certificado Digital, ICP e SGC. O que e isto tudo?
Um SGC e basicamente um programa que gerencia uma ICP e seus certificados. A seguir,sera brevemente explicado o funcionamento de um Certificado Digital, de uma ICP e suasrespectivas funcionalidades.
Um certificado digital e um objeto digital que garante que uma chave publica ede uma certa pessoa. Este certificado e considerado valido atraves da confianca em umaterceira entidade. Na Figura 1 pode-se ver um exemplo da utilizacao do certificado digital.
Figura 1. Exemplo da utilizacao de um Certificado Digital
Beto pede um certificado para Carlos. Carlos confere os dados de Beto, e verificaque Beto e mesmo Beto, e que a chave publica apresentada e de Beto. Carlos emite umcertificado assinado por ele, afirmando que Beto e o dono daquela chave. Agora, Betopossui um certificado assinado por uma terceira parte.
Alice quer enviar uma mensagem para Beto, e Alice confia em Carlos. Alicepega o certificado de Beto e verifica se o certificado e genuıno e se os dados nao foramalterados. Alice verifica tambem quem assinou aquele certificado. Ela ve que foi Carlos.Alice confia em Carlos, consequentemente Alice confia que o certificado e valido. Alicepergunta a Carlos se o certificado ainda e valido. Carlos confirma que o certificado aindaesta valido. Agora Alice sabe que a chave publica que esta no certificado, e mesmo achave publica de Beto. Entao ela pode enviar uma mensagem para Beto com seguranca.
E surge um problema, e se roubarem o certificado de Beto? Alice enviara mensa-gens para o ladrao, achando que esta enviando mensagens para Beto? Isto nao acontece,pois quando for roubado, ele avisara Carlos. E a proxima vez que Alice for enviar umamensagem a Beto, Carlos ira avisar que aquele certificado foi roubado.
Nessa pequena historia, temos varios conceitos. Vamos identifica-los um a um.
• Alice e Beto, sao indivıduos (pessoas, computadores, etc) querendo transmitiruma mensagem.
• Carlos e na verdade uma entidade emissora de certificados (que normalmente euma empresa ou um orgao governamental).
• Quando Beto pede a Carlos que seja emitido um certificado para ele, Beto estafazendo uma requisicao a entidade emissora de certificados. Este e o primeiropasso para a emissao de um certificado digital.
• Apos Beto fazer a requisicao, Carlos confere varios dados de Beto. Estaverificacao e feita no mundo real pela entidade emissora de certificados. Estee o segundo passo para a emissao de um certificado digital.
• Com os dados conferidos, a entidade emissora de certificados (ou Carlos) emiteum certificado para Beto. Esta etapa e a terceira e ultima etapa executada para aemissao de um certificado digital.
• Alice confia em Carlos. Numa ICP chamamos isto de relacao de confianca. Alicepossui uma relacao de confianca com Carlos, quer dizer que se Carlos assina algo,Alice acredita que aquilo e verdade.
• Alice pega o certificado de Beto, verifica se os dados nao foram alterados, verificase o certificado e genuıno e verifica quem assinou. Se todas as verificacoes obti-veram sucesso e quem assinou o certificado possui uma relacao de confianca comAlice, entao Alice confia nesse certificado.
• Alice pergunta a Carlos se o certificado ainda e valido. Os certificados digitaispodem ter o seu uso indevido, podem ser perdidos, ou outros problemas que inuti-lizem o certificado. Para saber quais certificados estao validos, e quais nao estao,a entidade emissora de certificados possui um Lista de Certificados Revogados(LCR). Toda vez que Alice for assinar uma mensagem, ela verifica se este certifi-cado esta na LCR. Se estiver Alice sabe que este certificado nao e mais valido, eo detentor da chave privada pode nao ser Beto.
Para facilitar a divisao de trabalhos, e aumentar a seguranca, as entidades emisso-ras de certificados sao divididas em duas autoridades:
1. Autoridades de Registro (AR) - Quando e feita uma requisicao, esta e a autori-dade que verifica se os dados sao verdadeiros. Esta autoridade somente faz asverificacoes, ela nao consegue emitir certificados.
2. Autoridade Certificadora (AC) - Esta autoridade e quem emite o certificado. UmaAC somente pode emitir um certificado apos a requisicao de emissao de um certi-ficado ser aprovado por alguma AR confiavel.
Uma AR confiavel e uma AR que possui uma relacao de confianca com algumaoutra entidade. Uma relacao de confianca igual a que existe entre Alice e Carlos. Comisto, percebemos que uma ICP e baseada totalmente em relacoes de confianca.
Um programa SGC basicamente tera que ter as seguintes caracterısticas:
• Deve permitir que sejam gerenciados os certificados (emitir e revogar certificados)• Deve armazenar de forma segura as informacoes referentes aos certificados
(validos ou nao), e as LCRs• Deve possuir a capacidade de publicar os certificados validos e as LCRs.• Deve impedir o acesso a chave privada da entidade aonde o programa esta insta-
lado. Este programa muito provavelmente sera o unico que tera acesso ao localaonde esta armazenada a chave privada da entidade.
3. Construindo um SGCA tarefa de construir um SGC pode parecer muito simples, porem alguns requisitos saonecessarios para ter-se um bom SGC. A seguir sera apresentado um SGC ja existente,com alguns problemas. Apos sera feita uma proposta de mudancas para aumentar algunsaspectos como seguranca, manutenibilidade, etc.
3.1. O Primeiro SGCiNesta secao sera feito um estudo de caso sobre um SGC, o Sistema de Gerenciamento deCertificados Digitais ICPEDU(SGCi). Este SGC foi desenvolvido atraves de uma parceriaente as equipes do Laboratorio de Seguranca em Computacao(LabSEC) da UniversidadeFederal de Santa Catarina(UFSC), Laboratorio de Criptografia Aplicada (LCA) da Uni-camp e o Laboratorio de Computacao Cientıfica(LCC) da Universidade Federal de MinasGerais(UFMG).
Este sistema foi desenvolvido para ser o mais flexıvel possıvel na implantacaoe no gerenciamento de uma ICP. Este sistema pode gerenciar uma ICP aonde todas asentidades (ACs e ARs) estejam no mesmo computador, ou em computadores separados.No segundo caso, cada computador devera ter uma copia do SGCi rodando, e cada com-putador ira gerenciar a sua entidade somente. Este requisito de projeto e algo muitointeressante, pois poderıamos ter uma AC em cada universidade do paıs, e uma AC-Raizque seria de confianca de todas essas ACs. Assim um certificado emitido para um alunoda universidade A, seria considerado confiavel para um aluno da universidade B.
Outro requisito deste projeto, e a disponibilizacao do programa para livreutilizacao no meio academico. Para isto o SGCi foi todo desenvolvido com softwareslivres, e o seu codigo-fonte e publico.
O SGCi esta dividido em 3 modulos-componentes:• Modulo Publico - Neste modulo os usuarios geram as requisicoes e estas sao en-
viadas ao modulo gestor.• Modulo Gestor - Este modulo gerencia toda a administracao das ACs e ARs.• Diretorio Publico - E uma especie de banco de dados especializado em buscas,
aonde sao armazenados os certificados emitidos e as LCRs.
Este artigo ira se focar no modulo gestor, pois este e o modulo que realiza a gestaodas entidades.
A Figura 2 representa o funcionamento do SGCi. A operacao de emissao de umcertificado seria realizada pela seguinte sequencia:
1. O usuario entra com seus dados no modulo publico2. O modulo publico gera uma requisicao e envia para a AR que o usuario selecionou.3. O operador da AR verifica se os dados da requisicao estao corretos. Se os dados
estiverem corretos, a requisicao e aprovada, assinada e enviada para a AC. Sehouver algum problema, a requisicao e rejeitada.
4. A AC entao recebe a requisicao assinada pela AR, emite o certificado, e o publicano Diretorio Publico.
Ja para revogar um certificados, os seguintes passos sao feitos:1. O operador da AR escolhe o certificado a ser revogado, e envia uma requisicao
assinada para a AC.
Figura 2. Exemplo da utilizacao de um Certificado Digital XXXXXXXXXXXXXFALTA REFERENCIAR O MANUAL DO SGCi
2. A AC recebe a requisicao assinada pela AR, revoga o certificado e o adiciona naLCR. Esta sera publicada (na maioria dos casos em datas pre-definidas) e armaze-nada no Diretorio Publico.
3.2. Analise do SGCiDurante alguns meses este programa foi avaliado e testado. O primeiro item a ser ana-lisado, e a instalacao do SGCi. A instalacao nao e automatica, mas existe um manualcom uma “receita-de-bolo” muito simples. Seguindo-se esta receita, a instalacao ocorrefacilmente! Porem, isto as vezes pode nao ser tao simples para um usuario leigo.
O projeto possui requisitos de flexibilidade muito interessantes, descritos anteri-ormente, e o SGCi tentou faze-los de forma automatica. Isto muito facilmente pode setornar um problema, imagine a situacao da Figura 3. Uma AR esta configurada numSGCi rodando no computador A, enquanto uma AC esta configurada em outro SGCi, queesta rodando no computador B. A maquina B esta protegida por um firewall (softwareque controla os dados que entram e saem do computador atraves da rede) que bloqueiaqualquer tentativa de conexao remota (esta e uma configuracao tıpica de um firewall).
Figura 3. Funcionamento do SGCi em maquinas diferentes
Em algum determinado momento uma requisicao e enviada para o computador
A. Este verifica os dados, e aprova a requisicao. O passo seguinte e enviar a requisicaoassinada para a AC. O SGCi tenta automatizar este procedimento fazendo uma conexaoremota ao computador B, e adicionado a requisicao no computador B. Porem, como ocomputador esta protegido por um firewall, esta conexao ira ser bloqueada, acabandocom a tentativa do SGCi em automatizar essa operacao, alem de gerar um erro.
Uma possıvel solucao para este problema, seria reconfigurar o firewall para aceitarconexoes remotas a partir do endereco IP do computador A (um endereco IP e um numeroque identifica aquela maquina, no mundo real seria como o endereco da casa de alguem).Isto resolveria o problema, agora o computador B aceita as requisicoes enviadas pelocomputador A. Porem criaria uma outra grande falha de seguranca! Um atacante poderiase passar pela maquina A (mudando o seu IP, para ser igual ao do computador A), e efetuarconexoes remotas ao computador B.
Outro problema causado por essa automatizacao e explorando-se uma falha nofirewall, poderia ser enviada qualquer requisicao ao sistema (e o mesmo iria aceitar).Inclusive, poderiam ser enviadas requisicoes invalidas que causariam comportamentosindesejaveis ao SGCi.
A unica forma de automatizar com seguranca este processo seria tendo as entida-des (ACs e ARs) no mesmo computador, algo que esta perfeitamente implementado noSGCi. So que esta situacao acontece muito raramente nas ICPs!
Ao serem realizados os testes das funcoes basicas do sistema (com ARs e ACs nomesmo computador) ele se comportou muito bem.
Com os testes basicos realizados, foi criado um plano de testes com mais de 90testes que deveriam ser realizados para testar exaustivamente as funcoes do programa,afim de encontrar o maior numero de erros possıveis.
Dos 90 testes, o SGCi passou em pouco mais do que 30 testes, sendo encontradomais de 80 erros! Como o SGCi e um software de codigo-fonte aberto, foi verificadoo seu codigo para encontrar os erros, na tentativa de soluciona-los. Mais detalhessobre os erros encontrados podem ser vistos em: http://projetos.labsec.ufsc.br/sgci/query?status=new&status=assigned&status=reopened&status=
closed&version=1.3.0&type=erro&order=priority
Todos os problemas citados acima (assim como os que nao foram citados) foramresolvidos com sucesso, analisando e alterando o codigo-fonte do programa. Porem, umagrande dificuldade surgiu quando foram encontrados trechos de codigo duplicados. Es-ses trechos eram praticamente iguais, exceto que um tinha uma linha escrito AC e outroescrito AR, por exemplo. Esta e uma pratica comum em programas estruturados, e seriafacilmente resolvida se fosse utilizado como paradigma de programacao a Orientacao aObjetos (OO).
Outra falha foi descoberta, esta sendo extremamente grande na questao deseguranca. Manter a chave privada segura! No SGCi, para fazer o “download” da chaveprivada de alguma entidade basta saber qual o codigo da entidade no banco de dados (senao souber pode ir por tentativa e erro). Isto acontece devido aos diretorios aonde sao gra-vadas as chaves, os certificados e outros dados da entidade estarem em subdiretorios quepodem ser acessados pela internet. Imagine que uma certa AC, foi cadastrada no banco
de dados com o codigo 5. E o IP da maquina aonde esta este sistema e 200.193.27.88.Para pegar a chave privada desta AC bastaria ser digitado o seguinte endereco em algumnavegador: http://200.193.27.88/ac/arquivos/2/chave/chave.pem.
A Figura 4 mostra ao lado esquerdo a estrutura de diretorios utilizada pelo SGCi,e ao lado direito o conteudo do diretorio chave. Qualquer dos diretorios mostrados naFigura 4 pode ser acessados atraves de um navegador de internet.
Figura 4. Estrutura de diretorios do SGCI e o conteudo da pasta chave
Partindo-se para a analise do Bando de Dados, foi verificado que a estrutura dobanco estava muito boa. Mas, se fosse adicionado qualquer funcionalidade ao sistema,muito provavelmente o banco teria que sofrer muitas modificacoes.
3.3. SGCi 2.0
Com o intuito de resolver todos os problemas apresentados anteriormente, e adicionaralgumas funcionalidades ao SGCi, resolveu-se criar uma nova versao. Uma versao quenao seria necessariamente compatıvel com a versao anterior. Algo como se fosse comecarum software do inıcio, porem utilizando as experiencias boas que a versao anterior deixou.Para isto, foram definidos varios requisitos, que serao apresentados neste momento.
Documentacao Total
Um dos requisitos mais simples para quem programa, e documentar o codigo. Todos osprogramadores sabem que a documentacao de um programa e muito importante. Mas,nem sempre isso acontece no dia-a-dia. Entao, foi determinado que a nova versao doSGCi tera o planejamento, desenvolvimento e os testes completamente documentados.
Modularizacao e facilidade de manutencao do programa
Acredita-se que este sistema seja um sistema que ira crescer muito nos proximos anos,tornando-se um programa reconhecido nacionalmente. Como todos os outros programasque cresceram sofreram varias modificacoes, com o SGCi devera acontecer o mesmo.
Para cumprir este requisito o SGCi sera dividido em varios pequenos modulos.Estes modulos terao um comportamento padrao em relacao a comunicacao com os outrosmodulos. Se algum dos modulos for ruim ou tiver problemas, ele podera ser facilmente
subtituıdo por outro modulo, bastando apenas que o novo modulo apresente o mesmopadrao de comunicacao que o modulo anterior. Atualmente e utilizado o banco de dadosPostgreSQL. Se por algum motivo no futuro este banco deixar se ser utilizado, e passar aser utilizado o MySQL, bastara criar um novo modulo para o SGCi que converse com oMySQL, e troca-lo pelo modulo que oferecia suporte ao PostgreSQL. O resto do sistemaira funcionar perfeitamente sem necessitar de nenhuma mudanca. O mesmo vai acontecercom a interface grafica, com o modulo publico, com o diretorio publico, e outras partes.
Este requisito ira ser muito util tanto para a manutencao do programa (correcao deerros), como para adicionar novas funcionalidades ao SGCi no futuro.
Para se ter garantia que no futuro o sistema comporte novas funcionalidades, de-vera ser dada bastante atencao ao banco de dados. Afinal, e aonde os dados sao armazena-dos, e se o banco de dados nao tiver uma certa flexibilidade, muitas novas funcionalidadesnao poderao ser implementadas.
Suporte a varios “modos de operacao”
Uma ICP pode se comportar de dois diferentes “modos de operacao”. A Figura 5 mostraestes modos.
Figura 5. “Modos de operacao” de um ICP
No primeiro modo, um usuario envia uma requisicao a AR. A AR verifica osdados, assina a requisicao e envia para a AC. A AC emite o certificado, devolve para aAR, e a AR envia o certificado ao usuario.
No segundo modo, um usuario envia uma requisicao a AC. A AC envia arequisicao para a AR, a AR verifica os dados, assina a requisicao e envia para a AC.A AC emite o certificado, e o envia ao usuario.
No primeiro modo o certificado e gerado na AC, e enviado a AR. No segundomodo o certificado e gerado na AC, mas nao e enviado a AR. Cada “modo de operacao”possui as suas vantagens e desvantagens. Quem vai implementar a ICP devera escolherqual sera o modo como o SGCi vai se comportar.
Para incorporar estes 2 “modos de operacao”, a automatizacao da comunicacaofeita entre as entidades, devera ser totalmente nula. Fazendo esta comunicacao manual-
mente, alem de poder utilizar o mesmo sistema para operar de 2 modos distintos, ganha-seem seguranca, pois nao havera a necessidade de fazer acessos remotos (conforme descritoanteriormente).
Maior seguranca possıvel
A nova estrutura de diretorios sera a estrutura que e apresentada na Figura 6. Pode-mos notar que os diretorios aonde ficam salvos os arquivos (chaves, certificados, etc) naosao visıveis ao servidor web (apache), pois a unica pasta visıvel e a public html. Sendoassim, o acesso a esses arquivos utilizando apenas um navegador de internet torna-sepraticamente impossıvel. Esta e a forma mais simples de resolver o maior problema deseguranca existente no SGCi anterior.
Figura 6. Nova Estrutura de diretorios do SGCi
Facilidade de instalacao, configuracao e utilizacao
A instalacao do sistema sera a mais simples possıvel, nao sendo necessario digitar varioscomando manualmente, como era feito no SGCi anterior.
A configuracao das opcoes do SGCi tambem poderao ser feitas atraves de umprograma muito simples de utilizar.
Quando o sistema for instalado sera necessario escolher uma senha para po-der executar o utilitario de configuracao do sistema. Alem da senha, este utilitario deconfiguracao somente podera ser acessado na maquina aonde esta instalado o SGCi. Estamedida foi tomada para impedir o acesso deste utilitario atraves da rede, mantendo oSGCi o mais seguro possıvel.
Atualmente o sistema e muito facil de utilizar, entao este aspecto sera mantidoo mais parecido possıvel ao SGCi anterior. Inclusive se possıvel a interface grafica seramantida a mesma.
Internacionalizacao do programa
Como este projeto e academico, as fronteiras interculturais devem ser removidas,forcando o SGCi a oferecer suporte a varias lınguas. Para isto, basta criar um arquivocom as mensagens traduzidas, mudar algumas configuracoes e o sistema estara totalmentetraduzido. Inicialmente o SGCi sera disponibilizado em Ingles e Portugues.
Programacao Orientada a Objetos
Como o paradigma de programacao escolhido para a nova versao do SGCi foi Orientacaoa Objetos, todos os benefıcios deste paradigma sao adicionados ao programa, comoheranca, polimorfismo, padroes de projeto, etc. Isto ira facilitar a correcao de erros que osistema tera, e ira facilitar a manutenibilidade do SGCi.
4. ConclusaoOs requisitos apresentados nao sao requisitos especıficos ao SGCi. Sao requisitos defundamental importancia para todo e qualquer sistema de gerenciamento de certificadosdigitais. A ideia do SGCi e fazer um programa de gerenciamento de certificados com amaior qualidade possıvel. Sendo assim, toda a modelagem do programa sera feita pen-sando nos requisitos citados anteriormente. Alguns requisitos demonstrados no decorrerdeste artigo foram exemplificados utilizado as solucoes encontradas pela equipe que iradesenvolver o SGCi 2.0.
5. Agradecimentos
ReferenciasHousley, R. and Polk, T. (2001). Planning for PKI - Best Practices Guide for Deploying
Public Key Infrastructure. Wiley Computer Publishing, New York.
ICPEDU (2005). GT - ICP-EDU Manual de Sistemas de Infra-Estrutura de ChavePublicas Educacional.
Schneier, B. (1996). Applied cryptography: protocols, algorithms, and source code in C.Wiley Computer Publishing, New York, 2nd edition.
Stallings, W. (2003). Cryptography and Network Security: Principles and Practice. Pe-arson Education, Upper Saddle River, NJ, USA, 3rd. edition.