func parsePublicRsaKey(keyBytes []byte) (*FMPPublicKey, error) {
	var (
		parsers = []pkParser{
			x509big.ParseBigPKCS1PublicKey,
			x509big.ParseBigPKIXPublicKey,
		}
		errs []error
	)
	for _, p := range parsers {
		if key, err := p(keyBytes); err != nil {
			errs = append(errs, err)
		} else {
			return &FMPPublicKey{
				N: new(fmp.Fmpz).SetBytes(key.N.Bytes()),
				E: new(fmp.Fmpz).SetBytes(key.E.Bytes()),
			}, nil
		}
	}
	return nil, fmt.Errorf("parsePublicRsaKey failed: %v", errs)
}
parsePublicRsaKey attempts to try parsing the given public key yielding a FMPPublicKey or
an error using multiple methods.
package keys
import (
	"bufio"
	"bytes"
	"encoding/pem"
	"errors"
	"fmt"
	"regexp"
	"strings"
	"github.com/sourcekris/goRsaTool/ln"
	fmp "github.com/sourcekris/goflint"
	"github.com/sourcekris/x509big"
)
var (
	lineRE = regexp.MustCompile(`(?i)^([necpqdk][pq0]?t?|)\s*[:=]\s*((?:0x)?[0-9a-f]+)`)
	numRE = regexp.MustCompile(`[0-9a-f]+`)
	modRE = regexp.MustCompile(`(?i)^n`)
	expRE = regexp.MustCompile(`(?i)^e`)
	ctRE  = regexp.MustCompile(`(?i)^c`)
	kptRE = regexp.MustCompile(`(?i)^kpt`)
	d0RE = regexp.MustCompile(`(?i)^d0`)
	pRE  = regexp.MustCompile(`(?i)^p`)
	qRE  = regexp.MustCompile(`(?i)^q`)
	dpRE = regexp.MustCompile(`(?i)^dp`)
	dqRE = regexp.MustCompile(`(?i)^dq`)
)
type pkParser func([]byte) (*x509big.BigPublicKey, error)