Os procedimentos de encriptação e desencriptação da chave de sessão encrypt_local_key e decrypt_remote_key são chamados no módulo get_common_key. Ambas as operações são realizadas em Sistemas Extra Cypher Net através da mesma função long_power_mod (exponencialização), só que utilizam chaves RSA diferentes: a encriptação é realizada com a sua chave privada e a desencriptação é realizada com a chave pública do parceiro.
typedef struct session_key_item
{
	unsigned char packed[PACKED_VALUE_LENTH];
	unsigned char unpacked[VALUE_LENTH];
} SESSIONKEYITEM;
SESSIONKEYITEM local_key, remote_key, common_key;
unsigned char crypted_local_key[PACKED_VALUE_LENTH], crypted_remote_key[PACKED_VALUE_LENTH];
void encrypt_local_key(void)
{
	unsigned char crypted_value[VALUE_LENTH];
	long_power_mod(local_key.unpacked, encrypt_rsa_key.exponent, encrypt_rsa_key.modulus, crypted_value);
	pack_value(crypted_value, crypted_local_key);
}
void decrypt_remote_key(void)
{
	unsigned char crypted_value[VALUE_LENTH];
	unpack_value(crypted_remote_key, crypted_value);
	long_power_mod(crypted_value, decrypt_rsa_key.exponent, decrypt_rsa_key.modulus, remote_key.unpacked);
	pack_value(remote_key.unpacked, remote_key.packed);
}
O algoritmo de operação dos procedimentos pack_value e unpack_value pode ser encontrado aqui.
O conteúdo desta página está também disponível em inglês, francês, alemão, espanhol, italiano, ucraniano e russo.
| © Extra Systems, 2024 | 
 |