c - Check if the file is correct using sha1withRsa via openssl functions -
hi, have file_data(xml format) , file_signature(asn1 der), , have certificate(x509 asn1 der). want check if file_data correct, have problems. i'm doing:
main idea: company creates file_data, using sha1 gets hash of file_data, , encrypts hash using rsa private key , gets file_signature. company sends me file_data , file_signature , certificate. public key certificate file_signature , decrypt file_signature using public key , hash_1. file_data , use sha1 hash_2. if hash_1 , hash_2 equal, can trust content of file_data, right?
implementation:
- load certificate:
d2i_x509_fp()function. have certificate. - get public key of certificate:
x509_extract_key, have public key. - now want load file_signature decrypt using public key, file_signature has asn1 der format how can load it, function in openssl should use?
- suppose read file_signature, must decrypt using public key, there api purpose?
- suppose decrypt file_signature , hash_1.
- now must load file_data , hash of using sha1 function hash_2, function must use?
sha1(), orsha1_init, sha1_update, sha1_finish? - suppose hash_1 , hash_2, how must compare them, using
memcmp? - suppose compare them, if equal, can use file_data.
another question file_signature 128 byte len , when decrypt 128 byte hash_1(am rigth) , when hash of file_data hash_2 it's length 20 bytes, how can compare them, or misunderstand something?
thanks help! p.s. sorry english;).
if file_signature of 128 bytes, not asn.1 encoded. 128 bits key length of 1024 bit key (on low side nowadays, check keylength.com). hashes not directly encrypted if rsa used: first wrapped within asn.1 structure, , padded, according pkcs#1 v1.5 (google it).
normally don't perform hashing separately rsa encrypt. libraries openssl contain functions perform verification hash automatically calculated (no doubt openssl_verify()). functions compare you.
note need establish trust public key, otherwise attacker generate random key pair , send different public key attackers signed data. public keys trusted using direct communication beforehand, or using pki infrastructure (certificate chains).
Comments
Post a Comment