package mainimport ( "log" "strings" "github.com/dumacp/smartcard" "github.com/dumacp/smartcard/nxp/mifare")func main() { ctx, err := smartcard.NewContext() if err != nil { log.Fatal("Not connection") } defer ctx.Release() readers, err := smartcard.ListReaders(ctx) for i, el := range readers { log.Printf("reader %v: %s\n", i, el) } samReaders := make([]smartcard.Reader,0) for _, el := range readers { if strings.Contains(el, "SAM") { samReaders = append(samReaders, smartcard.NewReader(ctx, el)) } } for _, samReader := range samReaders { sam, err := mifare.ConnectSamAv2(samReader) if err != nil { log.Printf("%s\n",err) continue } version, err := sam.GetVersion() if err != nil { log.Fatalln("Not GetVersion: ", err) } log.Printf("GetVersion sam: % X\n", version) }}
package mainimport ("log""flag""strings""encoding/hex""github.com/dumacp/smartcard""github.com/dumacp/smartcard/nxp/mifare")var keyS stringvar keyNbr intfunc init() { flag.StringVar(&keyS, "key", "00000000000000000000000000000000", "key aes128") flag.IntVar(&keyNbr, "keyNbr", 0x4002, "key Number")}func main() {flag.Parse()key, err := hex.DecodeString(keyS)if err != nil {log.Fatal(err)}log.Printf("key: [% X]\n", key)ctx, err := smartcard.NewContext()if err != nil {log.Fatal("Not connection")}defer ctx.Release()readers, err := smartcard.ListReaders(ctx)for i, el := range readers {log.Printf("reader %v: %s\n", i, el)}mplusReaders := make([]smartcard.Reader,0)for _, el := range readers {if strings.Contains(el, "PICC") {mplusReaders = append(mplusReaders, smartcard.NewReader(ctx, el))}}for _, mplusReader := range mplusReaders {mplus, err := mifare.ConnectMplus(mplusReader)if err != nil {log.Printf("%s\n",err)continue}uid, err := mplus.UID()if err != nil {log.Fatalln("ERROR: ", err)}log.Printf("card UID: % X\n", uid)ats, err := mplus.ATS()if err != nil {log.Println("ERROR: ", err)}log.Printf("card ATS: % X\n", ats)resp, err := mplus.FirstAuth(keyNbr,key)if err != nil {log.Fatalf("Error: %s\n",err)}log.Printf("Auth: % X\n", resp)}}