Se implementó una biblioteca que incluye funcionalidades básicas de encriptación y firma digital para el generador .Net.
Esta biblioteca se integra a GX X como un conjunto de objetos externos y una DLL de soporte y permite:
- Crear y validar firmas digitales
- Cifrar textos o archivos.
Esto permitirá incluir funcionalidades de cifrado en los clientes que necesiten incorporarlo en sus aplicaciones.
A continuación se describen los tipos de datos agregados al lenguaje mediante esta biblioteca.
CryptographicHash
Permite crear un hash para un texto dado.
Algoritmos soportados:
- MD5
- RIPEMD160
- SHA1
- SHA256
- SHA384
- SHA512
Método estático para crear el objeto, recibe un string con el nombre del algoritmo a utilizar.
base64string ComputeHash(string data)
Método para obtener el valor de hash.
&hashAlg:CryptographicHash
&hashAlg = CryptographicHash.Create( "MD5")
&outp = &hashAlg.ComputeHash(&text)
PKCS1Signature
Permite manipular firmas digitales básicas con clave pública-privada utilizando certificados X509.
string ErrorMessage
Devuelve el texto del último error registrado.
X509Certificate2 Certificate
Certificado X509 que provee las claves para firmar.
base64string Sign(string text)
Dado un texto devuelve una firma para este, utilizando la información del certificado configurado.
bool VerifySignature(base64string signature, string text)
Dado un texto y una firma, verifica si la firma corresponde al texto utilizando la información del certificado configurado.
&pkcs1.Certificate = CryptoUtils.GetCertificateFromFile1(&pathCertificado, &clave)
&firma = &pkcs1.Sign( &texto)
...
...
if (&pkcs1.VerifySignature( &firma, &texto ))
&error = "Firma valida!"
else
&error = &pkcs1.ErrorMessage
endif
PKCS7Signature
Permite manipular firmas digitales con formato según el estándar PKCS7, con clave pública-privada utilizando certificados X509.
X509Certificate2 Certificate
Certificado X509 que provee las claves.
bool Detached
Indica si la firma contiene los datos cifrados.
bool ValidateCertificates
Determina si además se debe validar el certificado al verificar una firma (falso por defecto)
string ErrorMessage
Devuelve el texto del último error registrado.
string Sign(string text)
Dado un texto devuelve una firma para este, utilizando la información del certificado configurado.
bool VerifySignature(string signature, string text)
Dado un texto y una firma, verifica si la firma corresponde al texto utilizando la información del certificado configurado.
string ExtractEnvelopedData(string dataWithSignature)
Dada una firma que contiene la información firmada, extrae el texto de esta.
&pkcs7.Certificate = CryptoUtils.GetCertificateFromFile1(&certificado, &clave)
&pkcs7.Detached = true
&firma = &pkcs7.Sign( &texto)
...
...
if (&pkcs7.VerifySignature( &firma, &texto ))
&error = "Firma valida!"
else
&error = &pkcs7.ErrorMessage
endif
SymmetricEncryption
Permite cifrar un texto o un archivo utilizando un algoritmo simétrico. Los algoritmos soportados son:
- Rijndael
- DES
- RC2
- TripleDES
string Key
Clave de cifrado, se genera automaticamente al crear la instancia.
string IV
Vector de inicialización de cifrado, se genera automáticamente al crear la instancia.
int ErrorCode
Código de error de la última operación realizada (0=ok, 1=error).
string ErrorDescription
Description de error de la última operación realizada.
int KeySize
Tamaño de la clave.
List<string> LegalKeySizes
Tamaños posibles de la clave soportados por el algoritmo seleccionado.
int BlockSize
Tamaño del bloque.
List<string> LegalBlockSizes
Tamaños de bloques soportados por el algoritmo seleccionado.
SymmetricEncryption Create(string algorithm)
Método estático para crear una instancia del algoritmo de cifrado. Recibe como parámetro un string con el nombre del algoritmo a crear.
base64string EncryptString(string inStr)
Devuelve el texto dado cifrado según el algoritmo, clave y vector de inicialización configurados.
string DecryptString(base64string inData)
Devuelve el texto dado descifrado según el algoritmo, clave y vector de inicialización configurados.
EncryptFile(string inFileName, string outFileName)
Cifra un archivo dado.
DecryptFile(string inFileName, string outFileName)
Descifra un archivo dado.
Event'encrypt'
&symCrypter = SymmetricEncryption.Create( "rijndael")
&key = &symCrypter.Key
&IV = &symCrypter.IV
&encrypted = &symCrypter.EncryptString(&input)
EndEvent
Event'decrypt'
&symCrypter = SymmetricEncryption.Create( "rijndael")
&symCrypter.Key = &key
&symCrypter.IV = &IV
&outp = &symCrypter.DecryptString(&encrypted)
EndEvent
Criptography sample