func DecodeKey(encoded string) (*Key, error) {
	// Re-add padding.
	if m := len(encoded) % 4; m != 0 {
		encoded += strings.Repeat("=", 4-m)
	}

	b, err := base64.URLEncoding.DecodeString(encoded)
	if err != nil {
		return nil, err
	}

	ref := new(pb.Reference)
	if err := proto.Unmarshal(b, ref); err != nil {
		return nil, err
	}

	return protoToKey(ref)
}
func DecodeKey(encoded string) (*Key, error) {
	
	if m := len(encoded) % 4; m != 0 {
		encoded += strings.Repeat("=", 4-m)
	}

	b, err := base64.URLEncoding.DecodeString(encoded)
	if err != nil {
		return nil, err
	}

	ref := new(pb.Reference)
	if err := proto.Unmarshal(b, ref); err != nil {
		return nil, err
	}

	return protoToKey(ref)
}
func DecodeKey ( encoded string ) ( * Key , error ) { // Re-add padding. if m := len ( encoded ) % 4 ; m != 0 { encoded += strings . Repeat ( " " , 4 - m ) } b , err := base64 . URLEncoding . DecodeString ( encoded ) if err != nil { return nil , err } ref := new ( pb . Reference ) if err := proto . Unmarshal ( b , ref ) ; err != nil { return nil , err } return protoToKey ( ref ) }
// DecodeKey decodes a key from the opaque representation returned by Encode.
DecodeKey decodes a key from the opaque representation returned by Encode .