package bambunfc import ( "crypto/hkdf" "crypto/sha256" "fmt" ) var kdfSalt = []byte{ 0x9a, 0x75, 0x9c, 0xf2, 0xc4, 0xf7, 0xca, 0xff, 0x22, 0x2c, 0xb9, 0x76, 0x9b, 0x41, 0xbc, 0x96, } const kdfInfo = "RFID-A\x00" // KeysA derives the 16 MIFARE Key-A values for a Bambu tag from its chip UID. func KeysA(uid []byte) ([16][6]byte, error) { var keys [16][6]byte if len(uid) == 0 { return keys, fmt.Errorf("%w: empty", ErrUID) } okm, err := hkdf.Key(sha256.New, uid, kdfSalt, kdfInfo, 16*6) if err != nil { return keys, fmt.Errorf("%w: hkdf: %v", ErrUID, err) } for i := range 16 { copy(keys[i][:], okm[i*6:i*6+6]) } return keys, nil }