func readAccountProtocol(r *bufio.Reader) (string, bool) { sexp.ReadListStart(r) ok1 := readSymbolAndExpect(r, "protocol") nm, ok2 := readPotentialSymbol(r) ok3 := sexp.ReadListEnd(r) return nm, ok1 && ok2 && ok3 }
func readPrivateKey(r *bufio.Reader) (PrivateKey, bool) { sexp.ReadListStart(r) ok1 := readSymbolAndExpect(r, "private-key") k := new(DSAPrivateKey) res, ok2 := readDSAPrivateKey(r) if ok2 { k.PrivateKey = *res k.DSAPublicKey.PublicKey = k.PrivateKey.PublicKey } ok3 := sexp.ReadListEnd(r) return k, ok1 && ok2 && ok3 }
func readParameter(r *bufio.Reader) (tag string, value *big.Int, end bool, ok bool) { if !sexp.ReadListStart(r) { return "", nil, true, true } tag, ok1 := readPotentialSymbol(r) value, ok2 := readPotentialBigNum(r) ok = ok1 && ok2 end = false if !sexp.ReadListEnd(r) { return "", nil, true, true } return }
func readAccount(r *bufio.Reader) (a *Account, ok bool, atEnd bool) { if !sexp.ReadListStart(r) { return nil, true, true } ok1 := readSymbolAndExpect(r, "account") a = new(Account) var ok2, ok3, ok4 bool a.Name, ok2 = readAccountName(r) a.Protocol, ok3 = readAccountProtocol(r) a.Key, ok4 = readPrivateKey(r) ok5 := sexp.ReadListEnd(r) return a, ok1 && ok2 && ok3 && ok4 && ok5, false }
func readAccounts(r *bufio.Reader) ([]*Account, bool) { sexp.ReadListStart(r) ok1 := readSymbolAndExpect(r, "privkeys") ok2 := true var as []*Account for { a, ok, atEnd := readAccount(r) ok2 = ok2 && ok if atEnd { break } as = append(as, a) } ok3 := sexp.ReadListEnd(r) return as, ok1 && ok2 && ok3 }
func readDSAPrivateKey(r *bufio.Reader) (*dsa.PrivateKey, bool) { sexp.ReadListStart(r) ok1 := readSymbolAndExpect(r, "dsa") k := new(dsa.PrivateKey) for { tag, value, end, ok := readParameter(r) if !ok { return nil, false } if end { break } if !assignParameter(k, tag, value) { return nil, false } } ok2 := sexp.ReadListEnd(r) return k, ok1 && ok2 }