コード例 #1
0
ファイル: example.go プロジェクト: knq/pemutil
func main() {
	store := pemutil.Store{}
	pemutil.PEM{"rsa-public.pem", "rsa-private.pem"}.Load(store)

	var ok bool
	var key *rsa.PrivateKey
	var pubKey *rsa.PublicKey

	if key, ok = store[pemutil.RSAPrivateKey].(*rsa.PrivateKey); !ok {
		log.Fatalln("key should be a *rsa.PrivateKey")
	}

	if pubKey, ok = store[pemutil.PublicKey].(*rsa.PublicKey); !ok {
		log.Fatalln("public key should be *rsa.PublicKey")
	}

	if !reflect.DeepEqual(pubKey, &key.PublicKey) {
		log.Fatalln("generated key and public key don't match")
	}

	// get pem data
	pemBuf, err := store.Bytes()
	if err != nil {
		log.Fatalln(err)
	}

	os.Stdout.Write(pemBuf)
}
コード例 #2
0
ファイル: pemutil.go プロジェクト: knq/pemutil
func main() {
	var keyset pemutil.Store
	var err error

	flag.Parse()

Generate:
	switch *flagAlg {
	case "sym":
		if *flagKeyLen == 0 {
			err = errors.New("must specify key length (-l)")
			break Generate
		}
		keyset, err = pemutil.GenerateSymmetricKeySet(*flagKeyLen)

	case "rsa":
		if *flagKeyLen == 0 {
			err = errors.New("must specify key length (-l)")
			break Generate
		}
		keyset, err = pemutil.GenerateRSAKeySet(*flagKeyLen)

	case "ecc":
		var curve elliptic.Curve
		switch strings.ToUpper(*flagCurve) {
		case "P224":
			curve = elliptic.P224()
		case "P256":
			curve = elliptic.P256()
		case "P384":
			curve = elliptic.P384()
		case "P521":
			curve = elliptic.P521()

		default:
			err = errors.New("unknown curve")
			break Generate
		}

		keyset, err = pemutil.GenerateECKeySet(curve)

	default:
		err = errors.New("unknown key type")
	}

	// check for errors
	if err != nil {
		fmt.Fprintf(os.Stderr, "error: %v\n", err)
		flag.Usage()
		os.Exit(1)
	}

	// encode pem data
	buf, err := keyset.Bytes()
	if err != nil {
		fmt.Fprintf(os.Stderr, "error: %v\n", err)
		os.Exit(1)
	}

	// output
	_, err = os.Stdout.Write(buf)
	if err != nil {
		fmt.Fprintf(os.Stderr, "error: %v\n", err)
		os.Exit(1)
	}
}