func ParseUserID(op *packet.OpaquePacket, parentID string) (*UserID, error) { var buf bytes.Buffer if err := op.Serialize(&buf); err != nil { return nil, errgo.Mask(err) } uid := &UserID{ Packet: Packet{ UUID: scopedDigest([]string{parentID}, uidTag, buf.Bytes()), Tag: op.Tag, Packet: buf.Bytes(), }, } p, err := op.Parse() if err != nil { return nil, errgo.Mask(err) } u, ok := p.(*packet.UserId) if !ok { return nil, ErrInvalidPacketType } err = uid.setUserID(u) if err != nil { return nil, errgo.Mask(err) } uid.Parsed = true return uid, nil }
func (sig *Signature) parse(op *packet.OpaquePacket) error { p, err := op.Parse() if err != nil { return errgo.Mask(err) } switch s := p.(type) { case *packet.Signature: return sig.setSignature(s) case *packet.SignatureV3: return sig.setSignatureV3(s) } return errgo.Mask(ErrInvalidPacketType, errgo.Any) }
func (pkp *PublicKey) parse(op *packet.OpaquePacket, subkey bool) error { p, err := op.Parse() if err != nil { return errgo.Mask(err) } switch pk := p.(type) { case *packet.PublicKey: if pk.IsSubkey != subkey { return ErrInvalidPacketType } return pkp.setPublicKey(pk) case *packet.PublicKeyV3: if pk.IsSubkey != subkey { return ErrInvalidPacketType } return pkp.setPublicKeyV3(pk) default: } return errgo.Mask(ErrInvalidPacketType) }