B.2 Programac~ao de Aplicac~oes com a API do S3L
B.2.3 Manipulac~ao de Contextos S3L Ponto{a{Ponto
Um contexto S3L ponto{a{ponto condensa toda a informac~ao necessaria a uma troca de mensagens S3L ponto{a{ponto3. Assim, previamente a assemblagem de uma mensagem S3L e necessario denir um destino bem como as qualidades de servico pretendidas, ou seja, dene{se um contexto S3L. Correspondentemente, da analise4 de uma mensagem S3L resulta a recuperac~ao n~ao so da mensagem original como tambem do contexto que assistiu a sua gerac~ao.
typedef struct {
u_char version; /* versao do protocolo S3L */
S3LPartieInfo *loc_info; /* informacao relativa a entidade local */ char rem_md5dname[16]; /* sintese MD5 do nome dist. da entidade remota */ char *rem_entry; /* entrada da entidade remota, na cache local */ char *rem_symlist; /* algoritmos simetricos da entidade remota */ char *rem_cbclist; /* subconjunto de rem_symlist com os algoritmos
da categoria CBC */
BitString dhagreedkey; /* chave acordada de Diffie--Hellman */ struct timeval rem_n; /* marca temporal remota */
struct timeval loc_n; /* marca temporal local */
u_long delta; /* desvio maximo admissivel entre loc_n e rem_n */ char *kijalg; /* algoritmo de encriptacao de Kp */
char *cryptalg; /* algoritmo de encriptacao dos dados */ char *macalg; /* algoritmo de producao do MAC */ char *compalg; /* algoritmo de compressao dos dados */ } S3LCtx;
Figura B.3: Estrutura S3LCtx.
A estruturaS3LCtx, denida em s3lsocket.he apresentada na gura B.3, constitui o tipo de dados no qual assenta um contexto S3L.
Note{se que, de um contexto S3L faz sempre parte a informac~ao relevante sobre a enti- dade local, acessvel atraves do campoloc info, o qual se sup~oe previamente inicializado e preenchido pelas func~oes de manipulac~ao de informac~ao de \caracter pessoal" (rever a secc~ao B.2.2).
O tipoBitstringe originario do SecuDE, sendo originalmente denido em [Sch95d] como:
struct BitString {
unsigned int nbits;
char *bits;
}
3A bem da legibilidade do resto do manual, assume{se, doravante, que as designac~oes \contexto(s)
S3L" e \mensagem(ens) S3L" se referem, por omiss~ao, a objectos do domnio S3L ponto{a{ponto. As correspondentes designac~oes da variante multiponto do S3L ser~ao, porem, explicitamente usadas (e.g.,
\contexto(s) S3L multiponto" e \mensagem(ens) S3L multiponto").
4Do ingl^es
A inicializac~ao, preenchimento e libertac~ao de memoria associada a contextos S3L faz-se a custa das func~oesS3Linit S3LCtx,S3Lmake S3LCtxe S3Lfree S3LCtx, respectivamente.
Em geral, chamadas as func~oes S3Linit S3LCtx e S3Lfree S3LCtx ocorrem uma so vez
ao longo da vida de um programa. Quanto a S3Lmake S3LCtx, e invocada explicitamente
sempre que se pretende denir um \contexto de emiss~ao" e e invocada implicitamente no seio de S3Lopen message(ver B.2.4) a m de denir o \contexto de recepc~ao". Este
ultimo podera ser imediatamente reutilizado, por exemplo, para enviar uma mensagem S3L de resposta a mesma entidade originadora.
Nome: S3Linit S3LCtx{ inicializa uma estruturaS3LCtx S3Linit S3LCtx
Sinopse:
#include <s3lsocket.h>
void S3Linit S3LCtx(S3LCtx *ctx, S3LPartieInfo *info);
Descric~ao:
A func~aoS3Linit S3LCtxinicializa os \campos apontadores" da estruturactxa NULL, preparando{a para uma posterior invocac~ao a func~ao S3Lmake S3LCtx.
Todavia, o campoloc infoe inicializado com o valor do par^ametroinfo, fazendo
com que toda a informac~ao relativa a entidade local passe a fazer automaticamente parte do contexto ctx.
Ver tambem:
S3Lmake S3LCtx,S3Lfree S3LCtx
Nome: S3Lmake S3LCtx{ dene contextosS3LCtx S3Lmake S3LCtx
Sinopse:
#include <s3lsocket.h>
S3Lbool S3Lmake S3LCtx(S3LCtx *ctx, char *rem id, char nsid, u long delta, char *kijalg, char *cryptalg, char *macalg, char *compalg, char *rem ipaddr, S3Lbool *skeyx called);
Descric~ao:
A func~aoS3Lmake S3LCtxpreenche os diversos campos da estruturactxdenindo
assim um contexto S3L. No entanto, por raz~oes de ordem pratica, alguns dos campos dectx n~ao s~ao denidos atraves desta func~ao: version e loc info s~ao
denidos em S3Linit S3LCtx; as marcas temporaisrem n e loc ns~ao denidas
emS3Lopen messagee S3Lmake message, respectivamente.
A denic~ao dos campos rem symlist, rem cbclist e dhagreedkey faz{se com
base em informac~ao preservada na cache .dhcache, concretamente na entrada
rem entry. Este campo corresponde a um caminho, no sistema de cheiros, para
uma subdirectoria de.dhcacheonde, supostamente, se encontra a entrada da enti-
dade remota identicada pelo par^ametrorem iddeS3Lmake S3LCtx. Na aus^encia
dessa entrada, o protocolo Skeyx e automaticamente executado, apos o que, uma vez criada a entrada da entidade remota na cache, os campos rem symlist, rem cbcliste dhagreedkeypodem ser nalmente preenchidos.
ctx: contexto S3L a (re)denir; rem id:
identica a \entidade remota" a que, conjuntamente com a entidade local (dada pelo campo ctx->loc info), o contexto se refere;
nsid(Name Space IDentier):
tipo do identicadorrem id; um valorNSID X500corresponde a presenca
de um nome distinto X.500 em rem id; um valor NSID MD5X500 corres-
ponde a presenca de uma sntese MD5 de um nome distinto X.500 em
rem id; no primeiro caso, o campo rem md5dname de ctxe denido pe-
la sntese MD5 de rem id, enquanto que no segundo, rem md5dname e
uma copia directa de rem id; os valores NSID X500 e NSID MD5X500s~ao
denidos em common.h;
delta: tempo de vida, em microsegundos, da mensagem S3L associada a este
contexto; o campo delta de ctx e inicializado deste valor; um valor S3L DEFAULT DELTA (denido em s3lsocket.hcomo 0L) corresponde a
um tempo de vida innito ou seja, n~ao se pretende qualquer protecc~ao contra ataques{de{repetic~ao;
kijalg:
algoritmo simetrico da famlia CBC com que, em conjunc~ao com an'esima
vers~ao da chave dhagreedkey, se cifrara/cifrou a chave especca (Kp)
de cada mensagem; n sera dado pelos campos loc n num contexto de
emiss~ao e porrem nnum contexto de recepc~ao; os valores dekijalgde-
vem pertencer, primariamente, ao \subconjunto CBC" de SYM ENC ALGS
(denido em keyx.h) e, em ultima inst^ancia, a intersecc~ao dos con-
juntos ctx->rem cbclist e ctx->loc info->cbclist; caso contrario,
n~ao ser~ao aceites, e o contexto n~ao sera denido; s3lsocket.h dene S3L DEFAULT CBC ALG como DES-CBC, valor a indicar, em caso de inde-
cis~ao;
cryptalg:
algoritmo simetrico a usar, em conjunc~ao com a chave Kp, na encrip-
tac~ao dos dados do utilizador integrados na mensagem S3L; os valores de kijalg devem pertencer, primariamente, ao conjunto SYM ENC ALGS
(denido emkeyx.h) e, em ultima inst^ancia, a intersecc~ao dos conjuntos ctx->rem symlistectx->loc info->symlist; caso contrario, n~ao ser~ao
aceites, e o contexto n~ao sera estabelecido; o valorS3L DEFAULT SYM ALG
(denido como IDEA) pode ser usado em caso de indecis~ao e o valor S3L NO CRYPT indica que se dispensa encriptac~ao dos dados do utiliza-
dor; ambos os valores s~ao denidos em s3lsocket.h; macalg:
algoritmo simetrico a usar, em conjunc~ao com a chave Kp e o algoritmo
de sntese MD5, para produzir o MAC (Message Authetication Code) da mensagem; os valores potenciais de macalge cryptalg coincidem, bem
como o seu metodo de validac~ao; o valorS3L DEFAULT MAC ALGa indicar
em caso de decis~ao e denido ems3lsocket.hcomoIDEA; a autenticac~ao
compalg:
algoritmo de compress~ao a usar sobre os dados do utilizador; na vers~ao ac-
tual do S3L e suportado apenas o algoritmo
S3L DEFAULT COMPRESS ALG, denido em s3lsocket.h como ZLIB-1.0.3; a compress~ao e facultativa, o que se pode exprimir atraves
do valorS3L NO COMPRESS; rem ipaddr:
endereco IP onde reside a entidade remota;
skeyx called:
indicador da ocorr^encia do protocolo Skeyx; normalmente tem o valor
S3LFALSE; se antes da invocac~ao a S3Lmake S3LCtx, o protocolo Skeyx
tiver sido executado recentemente com a entidade rem id na maquina rem ipaddrent~aoskeyx calleddevera ser fornecido com o valorS3LTRUE,
evitando assim uma eventual execuc~ao automatica de Skeyx dentro de
S3Lmake S3LCtx; a variavel que suporta skeyx called deve ser reutili-
zada quando rem ide rem ipaddr s~ao invariantes entre sucessivas invo-
cac~oes de S3Lmake S3LCtx;
Valores de retorno:
A func~ao retornaS3LTRUE se bem sucedida. Caso contrario retorna S3LABORT.
Ver tambem:
S3Linit S3LCtx,S3Lfree S3LCtx,S3Lopen message
Nome: S3Lfree S3LCtx{ liberta memoria din^amica numa estruturaS3LCtx S3Lfree S3LCtx
Sinopse:
#include <s3lsocket.h>
void S3Lfree S3LCtx(S3LCtx *ctx);
Descric~ao:
A func~ao S3Lfree S3LCtx liberta a memoria din^amica associada a alguns dos
campos da estruturainfoinvocando, por m, a func~aoS3Linit S3LCtxde forma
a que esses campos quem novamente inicializados aNULL.
Ver tambem:
S3Linit S3LCtx, S3Lmake S3LCtx