Need to setup k3 and k4

This commit is contained in:
nicolas.dorier 2023-10-09 12:16:02 +09:00
parent 1305ade002
commit 65d575849c
No known key found for this signature in database
GPG Key ID: 6618763EF09186FE
4 changed files with 32 additions and 5 deletions

View File

@ -109,7 +109,10 @@ var ntag = ctx.CreateNTag424();
var keys = new BoltcardKeys(
IssuerKey: new AESKey("00000000000000000000000000000001".HexToBytes()),
EncryptionKey: new AESKey("00000000000000000000000000000002".HexToBytes()),
AuthenticationKey: new AESKey("00000000000000000000000000000003".HexToBytes()));
AuthenticationKey: new AESKey("00000000000000000000000000000003".HexToBytes()),
K3: new AESKey("00000000000000000000000000000004".HexToBytes()),
K4: new AESKey("00000000000000000000000000000005".HexToBytes()));
var lnurlwService = "lnurlw://test.com";
// Note `BoltcardKeys.Default` assumes the card hasn't been setup yet.

View File

@ -1,10 +1,24 @@
using System.Security.Cryptography.X509Certificates;
namespace BTCPayServer.NTag424;
public record BoltcardKeys(AESKey IssuerKey, AESKey EncryptionKey, AESKey AuthenticationKey)
/// <summary>
/// The keys saved into the BoltCard
/// </summary>
/// <param name="IssuerKey">The key of the issuer, used to change key settings</param>
/// <param name="EncryptionKey">The key used to encrypt PICCData (p=)</param>
/// <param name="AuthenticationKey">The key used to authenticated PICCData (c=)</param>
/// <param name="K3">Unused, shouldn't be predictable</param>
/// <param name="K4">Unused, shouldn't be predictable</param>
public record BoltcardKeys(
AESKey IssuerKey,
AESKey EncryptionKey,
AESKey AuthenticationKey,
AESKey K3,
AESKey K4)
{
public static BoltcardKeys Default = new BoltcardKeys(AESKey.Default, AESKey.Default, AESKey.Default);
public BoltcardKeys() : this (AESKey.Default, AESKey.Default, AESKey.Default)
public static BoltcardKeys Default = new BoltcardKeys(AESKey.Default, AESKey.Default, AESKey.Default, AESKey.Default, AESKey.Default);
public BoltcardKeys() : this (AESKey.Default, AESKey.Default, AESKey.Default, AESKey.Default, AESKey.Default)
{
}
}

View File

@ -387,6 +387,8 @@ public class Ntag424
await ChangeFileSettings(file: DataFile.NDEF, new FileSettings(DataFile.NDEF));
await ChangeKey(4, AESKey.Default, keys.K4);
await ChangeKey(3, AESKey.Default, keys.K3);
await ChangeKey(2, AESKey.Default, keys.AuthenticationKey);
await ChangeKey(1, AESKey.Default, keys.EncryptionKey);
await ChangeKey(0, AESKey.Default);
@ -454,6 +456,12 @@ public class Ntag424
if (newKeys.AuthenticationKey != oldKeys.AuthenticationKey)
await ChangeKey(2, newKeys.AuthenticationKey, oldKeys.AuthenticationKey);
if (newKeys.K3 != oldKeys.K3)
await ChangeKey(3, newKeys.K3, oldKeys.K3);
if (newKeys.K4 != oldKeys.K4)
await ChangeKey(4, newKeys.K4, oldKeys.K4);
if (newKeys.IssuerKey != CurrentSession!.Key)
{
await ChangeKey(0, newKeys.IssuerKey); // No need of old key for 0

View File

@ -176,7 +176,9 @@ public class UnitTest1
var keys = new BoltcardKeys(
IssuerKey: new AESKey("00000000000000000000000000000001".HexToBytes()),
EncryptionKey: new AESKey("00000000000000000000000000000002".HexToBytes()),
AuthenticationKey: new AESKey("00000000000000000000000000000003".HexToBytes()));
AuthenticationKey: new AESKey("00000000000000000000000000000003".HexToBytes()),
K3: new AESKey("00000000000000000000000000000004".HexToBytes()),
K4: new AESKey("00000000000000000000000000000005".HexToBytes()));
//await ntag.ResetCard(keys);
await ntag.SetupBoltcard("http://test.com", BoltcardKeys.Default, keys);
var message = await ntag.ReadNDef();