Procédures OPENSSL

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
caussatjerome
Messages : 50
Inscription : lun. 24/sept./2012 20:57
Localisation : Somme

Procédures OPENSSL

Message par caussatjerome »

Bonjours à tous :)
Voici quelques procédures pour implémenter quelques commandes OPENSSL :

Code : Tout sélectionner

Global path.s="C:\openssl\bin\";-Variable du chemin ou se trouve openssl

;-Procedure RSA:
Procedure rsa_openssl_rand(taille,randfile.s,dossier.s);-generation de fichier de données pseudo-aléatoires
RunProgram(path.s+"openssl.exe","rand -out "+randfile.s+" "+Str(taille),dossier.s,#PB_Program_Wait| #PB_Program_Hide)
EndProcedure

Procedure.s rsa_openssl_genrsa(taille,dossier.s);-Création de clef publique/privée RSA (Ne pas confondre avec un certificat CRT et sa clef !!)
rsa_openssl_rand(taille,"random.bin",dossier.s);-1 On génère un fichier de données pseudo-aléatoires
RunProgram(path.s+"openssl.exe","genrsa -rand random.bin -out mykey.pem "+Str(taille),dossier.s,#PB_Program_Wait| #PB_Program_Hide);-2 on gènere la clef rsa
RunProgram(path.s+"openssl.exe","rsa -in mykey.pem -out mycert.pem -outform PEM -pubout",dossier.s,#PB_Program_Wait| #PB_Program_Hide);-3 on extrait la clef publique
DeleteFile(dossier.s+"random.bin");-4 on efface le fichier de données pseudo-aléatoires
EndProcedure

Procedure.s rsa_openssl_rsautl_encrypt(entrer.s,dossier.s)
OpenFile(1,dossier.s+"entrer.dat")
WriteData(1,@entrer.s,Len(entrer.s))
CloseFile(1)
RunProgram(path.s+"openssl.exe","rsautl -encrypt -in entrer.dat -inkey mycert.pem -pubin -out coder.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-On chiffre avec la clef publique
RunProgram(path.s+"openssl.exe","base64 -in coder.dat -out base64.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on convertie en base64 (sa évite des BUG)
OpenFile(1,dossier.s+"base64.dat")
sortie.s=Space(Lof(1))
ReadData(1,@sortie.s,Lof(1))
CloseFile(1)
DeleteFile(dossier.s+"entrer.dat")
DeleteFile(dossier.s+"coder.dat")
DeleteFile(dossier.s+"base64.dat")
ProcedureReturn sortie.s
EndProcedure

Procedure.s rsa_openssl_rsautl_decrypt(entrer.s,dossier.s)
OpenFile(1,dossier.s+"entrer.dat")
WriteData(1,@entrer.s,Len(entrer.s))
CloseFile(1)
RunProgram(path.s+"openssl.exe","base64 -d -in entrer.dat -out coder.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on convertie en ascii
RunProgram(path.s+"openssl.exe","rsautl -decrypt -in coder.dat -inkey mykey.pem -out decoder.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on dechiffre avec la clef priver
OpenFile(1,dossier.s+"decoder.dat")
sortie.s=Space(Lof(1))
ReadData(1,@sortie.s,Lof(1))
CloseFile(1)
DeleteFile(dossier.s+"entrer.dat")
DeleteFile(dossier.s+"decoder.dat")
DeleteFile(dossier.s+"coder.dat")
ProcedureReturn sortie.s
EndProcedure

Procedure.s rsa_openssl_rsautl_sign(entrer.s,dossier.s)
OpenFile(1,dossier.s+"entrer.dat")
WriteData(1,@entrer.s,Len(entrer.s))
CloseFile(1)
RunProgram(path.s+"openssl.exe","rsautl -sign -in entrer.dat -inkey mykey.pem -out signer.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on signe avec la clef priver
RunProgram(path.s+"openssl.exe","base64 -in signer.dat -out base64.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on convertie en base64
OpenFile(1,dossier.s+"base64.dat")
sortie.s=Space(Lof(1))
ReadData(1,@sortie.s,Lof(1))
CloseFile(1)
DeleteFile(dossier.s+"entrer.dat")
DeleteFile(dossier.s+"signer.dat")
DeleteFile(dossier.s+"base64.dat")
ProcedureReturn sortie.s
EndProcedure

Procedure.s rsa_openssl_rsautl_verify(entrer.s,dossier.s)
OpenFile(1,dossier.s+"entrer.dat")
WriteData(1,@entrer.s,Len(entrer.s))
CloseFile(1)
RunProgram(path.s+"openssl.exe","base64 -d -in entrer.dat -out signer.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on convertie en ascii
RunProgram(path.s+"openssl.exe","rsautl -verify -in signer.dat -inkey mycert.pem -pubin -out verifier.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on verifie
OpenFile(1,dossier.s+"verifier.dat")
sortie.s=Space(Lof(1))
ReadData(1,@sortie.s,Lof(1))
CloseFile(1)
DeleteFile(dossier.s+"entrer.dat")
DeleteFile(dossier.s+"verifier.dat")
DeleteFile(dossier.s+"signer.dat")
ProcedureReturn sortie.s
EndProcedure
;-Fin de Procedure RSA:

;Programme de test:
clair.s="Ceci est un test de codage/decoder/signature/verification openssl."
dossiercourant.s=PathRequester("Openssl test :","C:\")
rsa_openssl_genrsa(1024,dossiercourant.s)
coder.s=rsa_openssl_rsautl_encrypt(clair.s,dossiercourant.s)
decoder.s=rsa_openssl_rsautl_decrypt(coder.s,dossiercourant.s)
signer.s=rsa_openssl_rsautl_sign(decoder.s,dossiercourant.s)
verifier.s=rsa_openssl_rsautl_verify(signer.s,dossiercourant.s)
Debug verifier.s
Il n'y à pas toutes le commandes, car j'ai du mal à les implémenter (notamment SMIME, X509, CA à cause de l'édition de fichier openssl.cnf que je ne métrise pas).
N'ésiter pas à poster des codes sources de commandes que je n'est pas implémenter ! sa nous fera tous avancer ;)
Bon codage à tous!