2020-11-14 04:42:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								<?xml version="1.0" encoding="UTF-8" ?>  
						 
					
						
							
								
									
										
										
										
											2021-06-04 18:03:15 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								<class  name= "HMACContext"  inherits= "RefCounted"  version= "4.0" >  
						 
					
						
							
								
									
										
										
										
											2020-11-14 04:42:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									<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" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "PackedByteArray"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-14 04:42:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Returns the resulting HMAC. If the HMAC failed, an empty [PackedByteArray] is returned.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										<method  name= "start" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "int"  enum= "Error"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "hash_type"  type= "int"  enum= "HashingContext.HashType"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "1"  name= "key"  type= "PackedByteArray"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-14 04:42:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<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" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "int"  enum= "Error"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<argument  index= "0"  name= "data"  type= "PackedByteArray"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-14 04:42:47 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<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>