PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

PV

  • Exemple de signature de chaîne à utiliser pour la mise en conformité des logiciels de caisse (Norme NF525).
  • Exemple de signature de chaîne
CertificatSigneChaîne (Exemple)
Exemple de signature de chaîne à utiliser pour la mise en conformité des logiciels de caisse (Norme NF525).
// Données à signer
bufASigner est un Buffer
bufSeparateurDonnees est un Buffer = ","
// Bundle contenant le certificat et la clé privée avec le type d'algorithme voulu :
// RSA 2048, Elliptic Curve Digital Signature Algorithm (ECDSA)....
sNomFichierCerticatEtClePrivePourSignature est une chaîne
sNomFichierCerticatEtClePrivePourSignature = fRepDonnées() + "\signature.p12"
// Mot de passe de la clé privée du certificat
sMotDepasseClePriveeCertificat est une chaîne = "motdepassecleprivee"
// Certificat seul ou clé public seule, qui est à fournir aux applications/outils
// qui doivent pouvoir vérifier les signatures
sNomFichierCerticatSeul est une chaîne = fRepDonnées() + ...
"\certificat.cer" //ou fRepDonnées() + "\public.pem"
// Signature obtenue
bufSignatureBrute est un Buffer
// Signature au format Base64 URL (que des caractères imprimables)
sSignaturebase64URL est une chaîne
 
// Données à signer en général une combinaison de rubriques :
// Id ligne, Date et heure (pour signature = date facture ou date paiement), CodeAction
// Id tiers, Libellé tiers, Num TVA tiers, Pays tiers,
// Nom societe, Num tva societe, Pays societe,
// Id auteur,Nom auteur
// Id facture,Ref facture,Date facture
// Id paiement,Ref paiement,Date paiement
// Montant paiement (total),Montant paiement (part sur la facture),Mode paiement
// Montant HT,Montant tva,Montant taxe 1,Montant taxe 2,Montant TTC
// Exemple ci-dessous avec quelques valeurs "en dur" au lieu des noms des rubriques :
tabRubriques est un tableau de chaînes = ["Idligne","DateHeureFacture", "CodeAction"]
bufASigner = TableauVersChaîne(tabRubriques,bufSeparateurDonnees) //Etc....
 
QUAND EXCEPTION DANS
bufSignatureBrute = CertificatSigneChaîne(bufASigner, ...
sNomFichierCerticatEtClePrivePourSignature, ...
sMotDepasseClePriveeCertificat, ...
certSignatureSeule + certSHA256 ) //SHA2 = SHA256
// Notes :  
// - pour gérer les algorithmes de certains certificats
// (Elliptic Curve Digital Signature Algorithm (ECDSA)),
// il faut indiquer le nom du fichier et
// NE PAS utiliser une variable certificat avec CertifcatCharge.
// - le certificat peut être intégré dans la librairie (fichier .WDL ou .EXE) de l'application
// il suffit de le mettre dans les dépendances du projet ("Autres"
// dans le treeview de l'explorateur du projet)
// - Il faut au minimum avoir téléchargé la mise à jour spécifique du 28 juillet 2017 :
// http://www.pcsoft.fr/st/telec/windev22/windev22_71k.htm#telecharger
FAIRE
Erreur("Echec de la signature", ExceptionInfo())
RETOUR
SINON
SI ErreurDétectée ALORS
Erreur("Erreur durant la signature", ErreurInfo())
SINON
// Transforme la signature en base64 URL, sans caractères non imprimable
sSignaturebase64URL = Encode(bufSignatureBrute, encodeBASE64URL)
 
Trace("Signature Base64URL : " + sSignaturebase64URL)
// Pour vérifier la signature dans un autre traitement, il faut un code de ce type :
// Attention : Il faut utiliser le fichier de clé public
// et non le certificat avec la clé privé qui lui nécessite un mot de passe
SELON CertificatVérifieChaîne(bufASigner, Décode(sSignaturebase64URL, encodeBASE64URL), ...
sNomFichierCerticatSeul, certSignatureSeule + certSHA256)
CAS certificatOk : Info("Signature valide et certificat fiable")
CAS certificatInvalide : Info("Signature ou certificat invalide", ErreurInfo())
CAS certificatExpiré : Info("Signature valide mais certificat expiré", ErreurInfo())
CAS certificatNonFiable : Info("Signature valide mais racine de confiance " + ...
"du certificat non fiable", ErreurInfo())
// Cas sur un certificat auto-signé utilisé sur une autre machine/un autre réseau
AUTRE CAS
Erreur("Résultat de la vérification de signature inattendu", ErreurInfo())
FIN
FIN        
FIN
Exemple de signature de chaîne
Signature de chaîne selon un certificat installé sur la machine (attention : utilisation de la syntaxe avec une variable de type Certificat NON COMPATIBLE avec la norme NF525 concernant les logiciels de caisse).
MonCertificat est un Certificat
// Ouverture du sélecteur de certificat de Windows
 
MonCertificat = CertificatSélecteur()
 
// Annulation ou erreur
SI MonCertificat.Nom = "" ALORS
RETOUR
FIN
 
 
// Teste la validité du certificat pour la signature
// Attention non compatible avec certains types de certificats notament ECDSA / Elliptic Curve
// pour ces certificats il faut utiliser la syntaxe de CertificatSigneChaîne
// sans le type 'Certificat' avec le nom du fichier certificat
SI MonCertificat.ValidePourSignature = Faux ALORS
Info("Le certificat sélectionné ne permet de pas de générer une signature.")
RETOUR
FIN
 
// Récupération du buffer contenant la signature
bufSignature est un Buffer
bufSignature = CertificatSigneChaîne("Chaîne de caractères à signer", MonCertificat)
 
// Récupération du certificat contenu dans le buffer de la signature
MonCertificatExtrait est un Certificat
MonCertificatExtrait = CertificatExtrait(bufSignature)
 
// Gestion des erreurs
SI MonCertificatExtrait = Null ALORS
RETOUR
FIN
 
// Ouverture de la fenêtre des propriétés du certificat
CertificatOuvrePropriétés(MonCertificatExtrait)
Version minimum requise
  • Version 16
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire