Open b- opened 7 years ago
(Let's pretend decrypted_dump, modified_dump, encrypted_dump, and key_variable are all arrays of the appropriate size, and ENCRYPT/DECRYPT are some sort of constant, or something)
There already are - there is nfc3d_amiibo_unpack
for decryption and nfc3d_amiibo_pack
.
I wanted to make this into a static or dynamic library, but I never got around it.
Okay, so let's get started. Poking also @ToolsDevelopper which may be interested in this. @HiddenRamblings is possibly relevant to this since he's the only so far which has used this library in a finished product.
Before I start converting this into a library, I need to know exactly what functions should be exposed, ie what this library should do automatically and what should be left to the developer.
For now, I was thinking in exposing the following functionality:
nfc3d_amiibo_create(const nfc3d_master_keys *)
: creates a new amiibo instanceamiibo_from_tag(ctx *, uint8_t *)
: decrypts the given data into the context, in internal formatamiibo_to_tag(ctx *, uint8_t *)
: encrypts this amiibo into the given bufferamiibo_sign(ctx *)
: shortcut for amiibo_sign_tag
followed by amiibo_sign_data
amiibo_sign_data(ctx *)
: signs the data so it's picked up as data being valid by the 3DSamiibo_sign_tag(ctx *)
: signs the UID so it's picked up as original amiibo by the 3DSamiibo_check(ctx *)
: shortcut for amiibo_check_data
and amiibo_check_tag
amiibo_check_data(ctx *)
: checks the data signatureamiibo_check_tag(ctx *)
: checks the tag signatureamiibo_get_uid(ctx *)
: returns a pointer to the UIDamiibo_get_data(ctx *)
: returns a pointer to the dataI'm not sure if amiibo_sign_*
should be exposed, or be done automatically as part of the amiibo_to_tag
call. I'm not sure either if data would be more useful in the format the 3DS uses (so-called "internal format" in amiitool) or as it's stored in the tag ("tag format"
@socram8888 its been 4 years so i doubt it, but any updates on this? i was looking into using rust's bindgen to use amiitool in rust, but didnt have any luck since it requires a built library iirc
@jozz024 I've not looked any further. Packing up libraries in C is something I'm pretty terrified of and have stayed as far as possible from it.
The encryption is pretty basic, so if you're using Rust maybe it could be easier to just port it entirely and benefit from Rust's dependency manager.
that was my next thought, have just been debating how to do it.
I've never developed for Rust so I'm sorry but can't help you with the implementation.
However, if you need any aid in understanding the algorithm, or maybe the design of the API, let me know.
sure, i appreciate it
hey @socram8888 if its not too much trouble, can you explain what you use mbedtls for? i've found a rust port of that, but i'm still a tad confused as to what it's used for
@jozz024 mbedTLS is used for:
There's no reason why to use mbedTLS. I used that because it was pretty small and I did not have to deal with the hassle of compiling against a dynamic library such as OpenSSL.
wow it's been 6 months alr i finally have a semi working rust amiibo library (https://github.com/jozz024/amiibo-rs) but atm i'm facing issues with lock 💀 i think i'm doing something with the hmac calculation wrong, but i just thought i'd update since i came to check the repo if i did anything wrong
Hi,
I'm trying to write code that incorporates Amiitool. It would be amazing if it's functionality could be ported to a function, so I could just
#include "lib/amiitool/amiitool.h
and then do something likeI'm trying to do it myself, but unfortunately I'm very new to C, so any help would be appreciated immensely. To tell you the truth, I'm not even sure my example there doesn't have some glaring error. But I think it should be pretty self explanatory.
Thanks!