Las claves de cifrado RSA se almacenan en el disco en forma empaquetada y, después de leerlas (para su uso posterior en Extra Systems Cypher Net), se descomprimen elemento por elemento mediante el procedimiento unpack_value.
typedef struct rsa_key_item { unsigned char exponent[VALUE_LENTH]; unsigned char modulus[VALUE_LENTH]; } RSAKEYITEM; typedef struct rsa_key_packed_item { unsigned char exponent[PACKED_VALUE_LENTH]; unsigned char modulus[PACKED_VALUE_LENTH]; } RSAKEYPACKEDITEM; RSAKEYITEM encrypt_rsa_key, decrypt_rsa_key; int load_rsa_keys(char *encrypt_rsa_key_file, char *decrypt_rsa_key_file) { int file_handle; RSAKEYPACKEDITEM packed_key_item; if((file_handle = open(encrypt_rsa_key_file, O_RDONLY)) == -1) return 0; read(file_handle, &packed_key_item, sizeof(packed_key_item)); close(file_handle); unpack_value(packed_key_item.exponent, encrypt_rsa_key.exponent); unpack_value(packed_key_item.modulus, encrypt_rsa_key.modulus); if((file_handle = open(decrypt_rsa_key_file, O_RDONLY)) == -1) return 0; read(file_handle, &packed_key_item, sizeof(packed_key_item)); close(file_handle); unpack_value(packed_key_item.exponent, decrypt_rsa_key.exponent); unpack_value(packed_key_item.modulus, decrypt_rsa_key.modulus); return 1; }
Los parámetros de este procedimiento son los nombres de los archivos de claves RSA públicas (socio de comunicación) y privadas (propias).
El contenido de esta página también está disponible en inglés, francés, alemán, portugués, ucraniano y ruso.
© Extra Systems, 2024 |