2019-08-22 14:49:30 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								<?xml version="1.0" encoding="UTF-8" ?>  
						 
					
						
							
								
									
										
										
										
											2020-01-31 17:03:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								<class  name= "Crypto"  inherits= "Reference"  version= "4.0" >  
						 
					
						
							
								
									
										
										
										
											2019-08-22 14:49:30 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									<brief_description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-23 18:16:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Access to advanced cryptographic functionalities.
							 
						 
					
						
							
								
									
										
										
										
											2019-08-22 14:49:30 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									</brief_description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-23 18:16:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										The Crypto class allows you to access some more advanced cryptographic functionalities in Godot.
							 
						 
					
						
							
								
									
										
										
										
											2020-06-18 12:39:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										For now, this includes generating cryptographically secure random bytes, RSA keys and self-signed X509 certificates generation, asymmetric key encryption/decryption, and signing/verification.
							 
						 
					
						
							
								
									
										
										
										
											2020-09-12 17:06:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[codeblocks]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[gdscript]
							 
						 
					
						
							
								
									
										
										
										
											2019-09-23 18:16:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										extends Node
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										var crypto = Crypto.new()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										var key = CryptoKey.new()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										var cert = X509Certificate.new()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										func _ready():
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    # Generate new RSA key.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    key = crypto.generate_rsa(4096)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    # Generate new self-signed certificate with the given key.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    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")
							 
						 
					
						
							
								
									
										
										
										
											2020-06-18 12:39:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    # Encryption
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    var data = "Some data"
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    var encrypted = crypto.encrypt(key, data.to_utf8())
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    # 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() == decrypted)
							 
						 
					
						
							
								
									
										
										
										
											2020-09-12 17:06:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[/gdscript]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										using Godot;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										using System;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										using System.Diagnostics;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										public class CryptoNode : Node
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    public Crypto Crypto = new Crypto();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    public CryptoKey Key = new CryptoKey();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    public X509Certificate Cert = new X509Certificate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    public override void _Ready()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										        // Generate new RSA key.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										        Key = Crypto.GenerateRsa(4096);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										        // Generate new self-signed certificate with the given key.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										        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.ToUTF8());
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										        // 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.ToUTF8() == decrypted);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/codeblocks]
							 
						 
					
						
							
								
									
										
										
										
											2020-01-14 13:54:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[b]Note:[/b] Not available in HTML5 exports.
							 
						 
					
						
							
								
									
										
										
										
											2019-08-22 14:49:30 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									<tutorials > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									</tutorials> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									<methods > 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-14 04:42:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "constant_time_compare" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "bool" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</return> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "trusted"  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "1"  name= "received"  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Compares two [PackedByteArray]s for equality without leaking timing information in order to prevent timing attacks.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												See [url=https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy]this blog post[/url] for more information.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-18 12:39:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "decrypt" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</return> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "key"  type= "CryptoKey" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "1"  name= "ciphertext"  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Decrypt the given [code]ciphertext[/code] with the provided private [code]key[/code].
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												[b]Note[/b]: The maximum size of accepted ciphertext is limited by the key size.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "encrypt" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</return> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "key"  type= "CryptoKey" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "1"  name= "plaintext"  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Encrypt the given [code]plaintext[/code] with the provided public [code]key[/code].
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												[b]Note[/b]: The maximum size of accepted plaintext is limited by the key size.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-22 14:49:30 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										<method  name= "generate_random_bytes" > 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-18 13:59:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "PackedByteArray" > 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-22 14:49:30 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</return> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "size"  type= "int" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-18 13:59:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Generates a [PackedByteArray] of cryptographically secure random bytes with given [code]size[/code].
							 
						 
					
						
							
								
									
										
										
										
											2019-08-22 14:49:30 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "generate_rsa" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "CryptoKey" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</return> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "size"  type= "int" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-27 22:16:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Generates an RSA [CryptoKey] that can be used for creating self-signed certificates and passed to [method StreamPeerSSL.accept_stream].
							 
						 
					
						
							
								
									
										
										
										
											2019-08-22 14:49:30 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "generate_self_signed_certificate" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "X509Certificate" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</return> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "key"  type= "CryptoKey" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "1"  name= "issuer_name"  type= "String"  default= ""CN=myserver,O=myorganisation,C=IT"" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "2"  name= "not_before"  type= "String"  default= ""20140101000000"" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "3"  name= "not_after"  type= "String"  default= ""20340101000000"" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-23 18:16:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Generates a self-signed [X509Certificate] from the given [CryptoKey] and [code]issuer_name[/code]. The certificate validity will be defined by [code]not_before[/code] and [code]not_after[/code] (first valid date and last valid date). The [code]issuer_name[/code] 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 a X509 self-signed certificate.
							 
						 
					
						
							
								
									
										
										
										
											2020-09-12 17:06:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												[codeblocks]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												[gdscript]
							 
						 
					
						
							
								
									
										
										
										
											2019-09-23 18:16:41 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												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")
							 
						 
					
						
							
								
									
										
										
										
											2020-09-12 17:06:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												[/gdscript]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												[csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												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");
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												[/csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												[/codeblocks]
							 
						 
					
						
							
								
									
										
										
										
											2019-08-22 14:49:30 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-14 04:42:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "hmac_digest" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</return> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "hash_type"  type= "int"  enum= "HashingContext.HashType" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "1"  name= "key"  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "2"  name= "msg"  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Generates an [url=https://en.wikipedia.org/wiki/HMAC]HMAC[/url] digest of [code]msg[/code] using [code]key[/code]. The [code]hash_type[/code] parameter is the hashing algorithm that is used for the inner and outer hashes.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Currently, only [constant HashingContext.HASH_SHA256] and [constant HashingContext.HASH_SHA1] are supported.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-18 12:39:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "sign" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</return> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "hash_type"  type= "int"  enum= "HashingContext.HashType" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "1"  name= "hash"  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "2"  name= "key"  type= "CryptoKey" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Sign a given [code]hash[/code] of type [code]hash_type[/code] with the provided private [code]key[/code].
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "verify" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "bool" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</return> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "hash_type"  type= "int"  enum= "HashingContext.HashType" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "1"  name= "hash"  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "2"  name= "signature"  type= "PackedByteArray" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "3"  name= "key"  type= "CryptoKey" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</argument> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Verify that a given [code]signature[/code] for [code]hash[/code] of type [code]hash_type[/code] against the provided public [code]key[/code].
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-22 14:49:30 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									</methods> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									<constants > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									</constants> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								</class>