Crypto

Inherits: RefCounted < Object

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.

GDScriptC#

  1. var crypto = Crypto.new()
  2. # Generate new RSA key.
  3. var key = crypto.generate_rsa(4096)
  4. # Generate new self-signed certificate with the given key.
  5. var cert = crypto.generate_self_signed_certificate(key, "CN=mydomain.com,O=My Game Company,C=IT")
  6. # Save key and certificate in the user folder.
  7. key.save("user://generated.key")
  8. cert.save("user://generated.crt")
  9. # Encryption
  10. var data = "Some data"
  11. var encrypted = crypto.encrypt(key, data.to_utf8_buffer())
  12. # Decryption
  13. var decrypted = crypto.decrypt(key, encrypted)
  14. # Signing
  15. var signature = crypto.sign(HashingContext.HASH_SHA256, data.sha256_buffer(), key)
  16. # Verifying
  17. var verified = crypto.verify(HashingContext.HASH_SHA256, data.sha256_buffer(), signature, key)
  18. # Checks
  19. assert(verified)
  20. assert(data.to_utf8_buffer() == decrypted)
  1. using Godot;
  2. using System.Diagnostics;
  3. Crypto crypto = new Crypto();
  4. // Generate new RSA key.
  5. CryptoKey key = crypto.GenerateRsa(4096);
  6. // Generate new self-signed certificate with the given key.
  7. X509Certificate cert = crypto.GenerateSelfSignedCertificate(key, "CN=mydomain.com,O=My Game Company,C=IT");
  8. // Save key and certificate in the user folder.
  9. key.Save("user://generated.key");
  10. cert.Save("user://generated.crt");
  11. // Encryption
  12. string data = "Some data";
  13. byte[] encrypted = crypto.Encrypt(key, data.ToUtf8Buffer());
  14. // Decryption
  15. byte[] decrypted = crypto.Decrypt(key, encrypted);
  16. // Signing
  17. byte[] signature = crypto.Sign(HashingContext.HashType.Sha256, Data.Sha256Buffer(), key);
  18. // Verifying
  19. bool verified = crypto.Verify(HashingContext.HashType.Sha256, Data.Sha256Buffer(), signature, key);
  20. // Checks
  21. Debug.Assert(verified);
  22. Debug.Assert(data.ToUtf8Buffer() == decrypted);

Methods

bool

constant_time_compare(trusted: PackedByteArray, received: PackedByteArray)

PackedByteArray

decrypt(key: CryptoKey, ciphertext: PackedByteArray)

PackedByteArray

encrypt(key: CryptoKey, plaintext: PackedByteArray)

PackedByteArray

generate_random_bytes(size: int)

CryptoKey

generate_rsa(size: int)

X509Certificate

generate_self_signed_certificate(key: CryptoKey, issuer_name: String = “CN=myserver,O=myorganisation,C=IT”, not_before: String = “20140101000000”, not_after: String = “20340101000000”)

PackedByteArray

hmac_digest(hash_type: HashType, key: PackedByteArray, msg: PackedByteArray)

PackedByteArray

sign(hash_type: HashType, hash: PackedByteArray, key: CryptoKey)

bool

verify(hash_type: HashType, hash: PackedByteArray, signature: PackedByteArray, key: CryptoKey)


Method Descriptions

bool constant_time_compare(trusted: PackedByteArray, received: PackedByteArray) 🔗

Compares two PackedByteArrays for equality without leaking timing information in order to prevent timing attacks.

See this blog post for more information.


PackedByteArray decrypt(key: CryptoKey, ciphertext: PackedByteArray) 🔗

Decrypt the given ciphertext with the provided private key.

Note: The maximum size of accepted ciphertext is limited by the key size.


PackedByteArray encrypt(key: CryptoKey, plaintext: PackedByteArray) 🔗

Encrypt the given plaintext with the provided public key.

Note: The maximum size of accepted plaintext is limited by the key size.


PackedByteArray generate_random_bytes(size: int) 🔗

Generates a PackedByteArray of cryptographically secure random bytes with given size.


CryptoKey generate_rsa(size: int) 🔗

Generates an RSA CryptoKey that can be used for creating self-signed certificates and passed to StreamPeerTLS.accept_stream.


X509Certificate generate_self_signed_certificate(key: CryptoKey, issuer_name: String = “CN=myserver,O=myorganisation,C=IT”, not_before: String = “20140101000000”, not_after: String = “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.

GDScriptC#

  1. var crypto = Crypto.new()
  2. # Generate 4096 bits RSA key.
  3. var key = crypto.generate_rsa(4096)
  4. # Generate self-signed certificate using the given key.
  5. var cert = crypto.generate_self_signed_certificate(key, "CN=example.com,O=A Game Company,C=IT")
  1. var crypto = new Crypto();
  2. // Generate 4096 bits RSA key.
  3. CryptoKey key = crypto.GenerateRsa(4096);
  4. // Generate self-signed certificate using the given key.
  5. X509Certificate cert = crypto.GenerateSelfSignedCertificate(key, "CN=mydomain.com,O=My Game Company,C=IT");

PackedByteArray hmac_digest(hash_type: HashType, key: PackedByteArray, msg: PackedByteArray) 🔗

Generates an HMAC digest of msg using key. The hash_type parameter is the hashing algorithm that is used for the inner and outer hashes.

Currently, only HashingContext.HASH_SHA256 and HashingContext.HASH_SHA1 are supported.


PackedByteArray sign(hash_type: HashType, hash: PackedByteArray, key: CryptoKey) 🔗

Sign a given hash of type hash_type with the provided private key.


bool verify(hash_type: HashType, hash: PackedByteArray, signature: PackedByteArray, key: CryptoKey) 🔗

Verify that a given signature for hash of type hash_type against the provided public key.


User-contributed notes

Please read the User-contributed notes policy before submitting a comment.

Previous Next