--- /dev/null
+// (c) Bernhard Tittelbach, 2013
+
+package main
+
+import (
+ "log"
+ "regexp"
+ "strconv"
+ "errors"
+ "os"
+ "bufio"
+)
+
+var re_keynickline *regexp.Regexp = regexp.MustCompile("^\\s*([0-9a-fA-F]+)\\s+((?:\\p{Latin}|\\d)+).*")
+
+type KeyNickStore map[uint64]string
+
+func (key_nick_map *KeyNickStore) LoadKeysFile(filename string) error {
+ keysfile, err := os.OpenFile(filename, os.O_RDONLY, 0400) // For read access.
+ defer keysfile.Close()
+ if err != nil {
+ return err
+ }
+
+ //clear map
+ *key_nick_map = make(KeyNickStore)
+
+ linescanner := bufio.NewScanner(keysfile)
+ linescanner.Split(bufio.ScanLines)
+ for linescanner.Scan() {
+ m := re_keynickline.FindStringSubmatch(linescanner.Text())
+ if len(m) > 2 {
+ if kuint, err := strconv.ParseUint(m[1], 16, 64); err == nil {
+ (*key_nick_map)[kuint] = m[2]
+ } else {
+ log.Print("Error converting hex-cardid:",m[0])
+ }
+ }
+ }
+ return nil
+}
+
+func (key_nick_map *KeyNickStore) LookupHexKeyNick( key string ) (string, error) {
+ kuint, err := strconv.ParseUint(key, 16, 64)
+ if err != nil {
+ return "", errors.New("Invalid Hex-Card-Id")
+ }
+ nick, present := (*key_nick_map)[kuint]
+ if present {
+ return nick, nil
+ } else {
+ return "", errors.New("Key Unknown")
+ }
+}
\ No newline at end of file