2020-11-14 12:42:47 +00:00
<?xml version="1.0" encoding="UTF-8" ?>
2022-02-14 13:18:53 +00:00
<class name= "HMACContext" inherits= "RefCounted" version= "4.0" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "../class.xsd" >
2020-11-14 12:42:47 +00: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.
2021-12-15 14:26:54 +00:00
[codeblocks]
[gdscript]
extends Node
var ctx = HMACContext.new()
2020-11-14 12:42:47 +00:00
2021-12-15 14:26:54 +00:00
func _ready():
2023-03-13 21:58:27 +00:00
var key = "supersecret".to_utf8_buffer()
2021-12-15 14:26:54 +00:00
var err = ctx.start(HashingContext.HASH_SHA256, key)
assert(err == OK)
2023-03-13 21:58:27 +00:00
var msg1 = "this is ".to_utf8_buffer()
var msg2 = "super duper secret".to_utf8_buffer()
2021-12-15 14:26:54 +00:00
err = ctx.update(msg1)
assert(err == OK)
err = ctx.update(msg2)
assert(err == OK)
var hmac = ctx.finish()
print(hmac.hex_encode())
2020-11-14 12:42:47 +00:00
2021-12-15 14:26:54 +00:00
[/gdscript]
[csharp]
using Godot;
using System.Diagnostics;
2020-11-14 12:42:47 +00:00
2023-01-31 17:21:09 +00:00
public partial class MyNode : Node
2021-12-15 14:26:54 +00:00
{
2023-01-31 17:21:09 +00:00
private HmacContext _ctx = new HmacContext();
2022-09-15 09:04:32 +00:00
2021-12-15 14:26:54 +00:00
public override void _Ready()
{
2023-03-13 21:58:27 +00:00
byte[] key = "supersecret".ToUtf8Buffer();
2023-01-31 17:21:09 +00:00
Error err = _ctx.Start(HashingContext.HashType.Sha256, key);
2022-09-15 09:04:32 +00:00
Debug.Assert(err == Error.Ok);
2023-03-13 21:58:27 +00:00
byte[] msg1 = "this is ".ToUtf8Buffer();
byte[] msg2 = "super duper secret".ToUtf8Buffer();
2023-01-31 17:21:09 +00:00
err = _ctx.Update(msg1);
2022-09-15 09:04:32 +00:00
Debug.Assert(err == Error.Ok);
2023-01-31 17:21:09 +00:00
err = _ctx.Update(msg2);
2022-09-15 09:04:32 +00:00
Debug.Assert(err == Error.Ok);
2023-01-31 17:21:09 +00:00
byte[] hmac = _ctx.Finish();
2021-12-15 14:26:54 +00:00
GD.Print(hmac.HexEncode());
}
}
[/csharp]
[/codeblocks]
2020-11-14 12:42:47 +00:00
</description>
<tutorials >
</tutorials>
<methods >
<method name= "finish" >
2021-07-30 13:28:05 +00:00
<return type= "PackedByteArray" />
2020-11-14 12:42:47 +00:00
<description >
Returns the resulting HMAC. If the HMAC failed, an empty [PackedByteArray] is returned.
</description>
</method>
<method name= "start" >
2021-07-30 13:28:05 +00:00
<return type= "int" enum= "Error" />
2022-08-06 18:11:48 +00:00
<param index= "0" name= "hash_type" type= "int" enum= "HashingContext.HashType" />
<param index= "1" name= "key" type= "PackedByteArray" />
2020-11-14 12:42:47 +00: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 13:28:05 +00:00
<return type= "int" enum= "Error" />
2022-08-06 18:11:48 +00:00
<param index= "0" name= "data" type= "PackedByteArray" />
2020-11-14 12:42:47 +00:00
<description >
2022-08-12 16:07:53 +00:00
Updates the message to be HMACed. This can be called multiple times before [method finish] is called to append [param data] to the message, but cannot be called until [method start] has been called.
2020-11-14 12:42:47 +00:00
</description>
</method>
</methods>
</class>