Crypto

继承: RefCounted < Object

Provides access to advanced cryptographic functionalities.

描述

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 X509Certificate s.


    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);

方法

boolconstant_time_compare ( trusted: PackedByteArray, received: PackedByteArray )
PackedByteArraydecrypt ( key: CryptoKey, ciphertext: PackedByteArray )
PackedByteArrayencrypt ( key: CryptoKey, plaintext: PackedByteArray )
PackedByteArraygenerate_random_bytes ( size: int )
CryptoKeygenerate_rsa ( size: int )
X509Certificategenerate_self_signed_certificate ( key: CryptoKey, issuer_name: String = "CN=myserver,O=myorganisation,C=IT", not_before: String = "20140101000000", not_after: String = "20340101000000" )
PackedByteArrayhmac_digest ( hash_type: HashType, key: PackedByteArray, msg: PackedByteArray )
PackedByteArraysign ( hash_type: HashType, hash: PackedByteArray, key: CryptoKey )
boolverify ( hash_type: HashType, hash: PackedByteArray, signature: PackedByteArray, key: CryptoKey )

方法说明

bool constant_time_compare ( trusted: PackedByteArray, received: PackedByteArray )

Compares two PackedByteArray s 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.


    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");

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.

1

本方法通常需要用户覆盖才能生效。

2

本方法无副作用,不会修改该实例的任何成员变量。

3

本方法除了能接受在此处描述的参数外,还能够继续接受任意数量的参数。

4

本方法用于构造某个类型。

5

调用本方法无需实例,可直接使用类名进行调用。

6

本方法描述的是使用本类型作为左操作数的有效运算符。

7

这个值是由下列位标志构成位掩码的整数。

8

无返回值。