Class reference

Crypto

Inherits RefCounted

Provides access to advanced cryptographic functionalities.

Description

The Crypto class provides access to advanced cryptographic functionalities. Currently, this includes asymmetric key encryption/decryption, signing/verification, and generating cryptographically secure random bytes, RSA keys, HMAC digests, and self-signed X509Certificates.

		var crypto = Crypto.new()

		# Generate new RSA key.
		var key = crypto.generate_rsa(4096)

		# Generate new self-signed certificate with the given key.
		var cert = crypto.generate_self_signed_certificate(key, "CN=mydomain.com,O=My Game Company,C=IT")

		# Save key and certificate in the user folder.
		key.save("user://generated.key")
		cert.save("user://generated.crt")

		# Encryption
		var data = "Some data"
		var encrypted = crypto.encrypt(key, data.to_utf8_buffer())

		# Decryption
		var decrypted = crypto.decrypt(key, encrypted)

		# Signing
		var signature = crypto.sign(HashingContext.HASH_SHA256, data.sha256_buffer(), key)

		# Verifying
		var verified = crypto.verify(HashingContext.HASH_SHA256, data.sha256_buffer(), signature, key)

		# Checks
		assert(verified)
		assert(data.to_utf8_buffer() == decrypted)
		
		using Godot;
		using System.Diagnostics;

		Crypto crypto = new Crypto();

		// Generate new RSA key.
		CryptoKey key = crypto.GenerateRsa(4096);

		// Generate new self-signed certificate with the given key.
		X509Certificate cert = crypto.GenerateSelfSignedCertificate(key, "CN=mydomain.com,O=My Game Company,C=IT");

		// Save key and certificate in the user folder.
		key.Save("user://generated.key");
		cert.Save("user://generated.crt");

		// Encryption
		string data = "Some data";
		byte[] encrypted = crypto.Encrypt(key, data.ToUtf8Buffer());

		// Decryption
		byte[] decrypted = crypto.Decrypt(key, encrypted);

		// Signing
		byte[] signature = crypto.Sign(HashingContext.HashType.Sha256, Data.Sha256Buffer(), key);

		// Verifying
		bool verified = crypto.Verify(HashingContext.HashType.Sha256, Data.Sha256Buffer(), signature, key);

		// Checks
		Debug.Assert(verified);
		Debug.Assert(data.ToUtf8Buffer() == decrypted);
		

Methods

PackedByteArray decrypt(CryptoKey key, PackedByteArray ciphertext)

Decrypt the given ciphertext with the provided private key. Note: The maximum size of accepted ciphertext is limited by the key size.

PackedByteArray encrypt(CryptoKey key, PackedByteArray plaintext)

Encrypt the given plaintext with the provided public key. Note: The maximum size of accepted plaintext is limited by the key size.

X509Certificate generate_self_signed_certificate(CryptoKey key, String issuer_name = "CN=myserver,O=myorganisation,C=IT", String not_before = "20140101000000", String not_after = "20340101000000")

Generates a self-signed X509Certificate from the given CryptoKey and issuer_name. The certificate validity will be defined by not_before and not_after (first valid date and last valid date). The issuer_name must contain at least "CN=" (common name, i.e. the domain name), "O=" (organization, i.e. your company name), "C=" (country, i.e. 2 lettered ISO-3166 code of the country the organization is based in). A small example to generate an RSA key and an X509 self-signed certificate.

				var crypto = Crypto.new()
				# Generate 4096 bits RSA key.
				var key = crypto.generate_rsa(4096)
				# Generate self-signed certificate using the given key.
				var cert = crypto.generate_self_signed_certificate(key, "CN=example.com,O=A Game Company,C=IT")
				
				var crypto = new Crypto();
				// Generate 4096 bits RSA key.
				CryptoKey key = crypto.GenerateRsa(4096);
				// Generate self-signed certificate using the given key.
				X509Certificate cert = crypto.GenerateSelfSignedCertificate(key, "CN=mydomain.com,O=My Game Company,C=IT");
				
Source revision 5592dc3a7a61
Connection interrupted. Reload×

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.