Ключи шифрования RSA хранятся на диске в упакованном виде, а после чтения (для дальнейшего использования) поэлементно распаковываются процедурой 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; }
Параметрами данной процедуры являются имена файлов открытого (партнера по связи) и закрытого (своего собственного) ключа RSA.
© Extra Systems, 2024 |