mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	
		
			
	
	
		
			89 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
|   | <?xml version="1.0" encoding="UTF-8" ?> | ||
|  | <class name="HMACContext" inherits="Reference" version="4.0"> | ||
|  | 	<brief_description> | ||
|  | 		Used to create an HMAC for a message using a key. | ||
|  | 	</brief_description> | ||
|  | 	<description> | ||
|  | 		The HMACContext class is useful for advanced HMAC use cases, such as streaming the message as it supports creating the message over time rather than providing it all at once. | ||
|  | 	[codeblocks] | ||
|  | 	[gdscript] | ||
|  | 	extends Node | ||
|  | 	var ctx = HMACContext.new() | ||
|  | 
 | ||
|  | 	func _ready(): | ||
|  | 	    var key = "supersecret".to_utf8() | ||
|  | 	    var err = ctx.start(HashingContext.HASH_SHA256, key) | ||
|  | 	    assert(err == OK) | ||
|  | 	    var msg1 = "this is ".to_utf8() | ||
|  | 	    var msg2 = "vewy vewy secret".to_utf8() | ||
|  | 	    err = ctx.update(msg1) | ||
|  | 	    assert(err == OK) | ||
|  | 	    err = ctx.update(msg2) | ||
|  | 	    assert(err == OK) | ||
|  | 	    var hmac = ctx.finish() | ||
|  | 	    print(hmac.hex_encode()) | ||
|  | 
 | ||
|  | 	[/gdscript] | ||
|  | 	[csharp] | ||
|  | 	using Godot; | ||
|  | 	using System; | ||
|  | 	using System.Diagnostics; | ||
|  | 
 | ||
|  | 	public class CryptoNode : Node | ||
|  | 	{ | ||
|  | 	    private HMACContext ctx = new HMACContext(); | ||
|  | 	    public override void _Ready() | ||
|  | 	    { | ||
|  | 	        PackedByteArray key = String("supersecret").to_utf8(); | ||
|  | 	        Error err = ctx.Start(HashingContext.HASH_SHA256, key); | ||
|  | 	        GD.Assert(err == OK); | ||
|  | 	        PackedByteArray msg1 = String("this is ").to_utf8(); | ||
|  | 	        PackedByteArray msg2 = String("vewy vew secret").to_utf8(); | ||
|  | 	        err = ctx.Update(msg1); | ||
|  | 	        GD.Assert(err == OK); | ||
|  | 	        err = ctx.Update(msg2); | ||
|  | 	        GD.Assert(err == OK); | ||
|  | 	        PackedByteArray hmac = ctx.Finish(); | ||
|  | 	        GD.Print(hmac.HexEncode()); | ||
|  | 	    } | ||
|  | 	} | ||
|  | 
 | ||
|  | 	[/csharp] | ||
|  | 	[/codeblocks] | ||
|  | 	[b]Note:[/b] Not available in HTML5 exports. | ||
|  | 	</description> | ||
|  | 	<tutorials> | ||
|  | 	</tutorials> | ||
|  | 	<methods> | ||
|  | 		<method name="finish"> | ||
|  | 			<return type="PackedByteArray"> | ||
|  | 			</return> | ||
|  | 			<description> | ||
|  | 				Returns the resulting HMAC. If the HMAC failed, an empty [PackedByteArray] is returned. | ||
|  | 			</description> | ||
|  | 		</method> | ||
|  | 		<method name="start"> | ||
|  | 			<return type="int" enum="Error"> | ||
|  | 			</return> | ||
|  | 			<argument index="0" name="hash_type" type="int" enum="HashingContext.HashType"> | ||
|  | 			</argument> | ||
|  | 			<argument index="1" name="key" type="PackedByteArray"> | ||
|  | 			</argument> | ||
|  | 			<description> | ||
|  | 				Initializes the HMACContext. This method cannot be called again on the same HMACContext until [method finish] has been called. | ||
|  | 			</description> | ||
|  | 		</method> | ||
|  | 		<method name="update"> | ||
|  | 			<return type="int" enum="Error"> | ||
|  | 			</return> | ||
|  | 			<argument index="0" name="data" type="PackedByteArray"> | ||
|  | 			</argument> | ||
|  | 			<description> | ||
|  | 				Updates the message to be HMACed. This can be called multiple times before [method finish] is called to append [code]data[/code] to the message, but cannot be called until [method start] has been called. | ||
|  | 			</description> | ||
|  | 		</method> | ||
|  | 	</methods> | ||
|  | 	<constants> | ||
|  | 	</constants> | ||
|  | </class> |