MCPcopy Index your code
hub / github.com/dumacp/smartcard

github.com/dumacp/smartcard @v0.1.8

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1.8 ↗ · + Follow
761 symbols 1,943 edges 93 files 260 documented · 34%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

smartcard

smartcard devices under the PCSC implementation

Implementation for mifare smartcard family (Mifare Plus, Desfire, SamAV2, ...)

example 1 (SAMav2)

package main

import (
  "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)
  }
}

example 2 (Mifare Plus SL3 auth)

package main

import (
    "log"
    "flag"
    "strings"
    "encoding/hex"
    "github.com/dumacp/smartcard"
    "github.com/dumacp/smartcard/nxp/mifare"
)

var keyS string
var keyNbr int

func 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)
    }
}

Extension points exported contracts — how you extend this code

IReader (Interface)
IReader Interface to Reader device [5 implementers]
reader.go
Classic (Interface)
Classic Mifare Plus Interface [3 implementers]
nxp/mifare/mifareClassic.go
ICard (Interface)
ICard Interface [2 implementers]
card.go
Reader (Interface)
Interface to Reader device [2 implementers]
pcsc/reader.go
ICard (Interface)
Card Interface [2 implementers]
multiiso/card.go
Card (Interface)
Card Interface [1 implementers]
pcsc/card.go
BuildHeader (FuncType)
(no doc)
acs/acr128s/protocol.go
MifarePlus (Interface)
MifarePlus MifarePlus Interface [1 implementers]
nxp/mifare/mifarePlus.go

Core symbols most depended-on inside this repo

write
called by 206
clrc633/spi.go
Apdu
called by 105
card.go
VerifyResponse
called by 53
nxp/mifare/desfire/ev2/desfire.go
calcMacOnCommandEV2
called by 49
nxp/mifare/desfire/ev2/secmsgev2.go
Int
called by 35
nxp/mifare/desfire/ev2/desfire.go
read
called by 34
clrc633/spi.go
setmask
called by 34
clrc633/spi.go
BitPosition
called by 32
nxp/mifare/acl.go

Shape

Method 447
Function 225
Struct 48
TypeAlias 28
Interface 11
FuncType 2

Languages

Go100%

Modules by API surface

nxp/mifare/mifarePlus.go52 symbols
nxp/mifare/samav2/samAv2.go51 symbols
pcsc/card.go33 symbols
multiiso/reader.go32 symbols
nxp/mifare/acl.go24 symbols
pcsc/reader.go23 symbols
multiiso/card.go19 symbols
clrc633/reader.go19 symbols
acs/reader.go18 symbols
clrc633/card.go17 symbols
planeta/clsam/clsam.go16 symbols
nxp/mifare/samav2/entrykey.go15 symbols

For agents

$ claude mcp add smartcard \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page